在他们提到的这段代码片段(firebase doc)中,不要使用user.getUid()对后端服务器进行身份验证。改为使用FirebaseUser.getToken()。
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Name, email address, and profile photo Url
String name = user.getDisplayName();
String email = user.getEmail();
Uri photoUrl = user.getPhotoUrl();
// The user's ID, unique to the Firebase project. Do NOT use this value to
// authenticate with your backend server, if you have one. Use
// FirebaseUser.getToken() instead.
String uid = user.getUid();
}
getUid() A unique user ID, intended as the user's unique key across all providers.
getToken() The Firebase authentication token for this session.
我的要求是。
他们说getUid()是唯一的用户ID,但请勿使用此值对您的后端服务器进行身份验证。
为什么这样?为什么我们不能使用getUid()对您的后端服务器进行身份验证?
答案 0 :(得分:10)
uid是用户的唯一标识符。因此,虽然它识别用户,但它不会对其进行身份验证。
一个简单的推论是我的Stack Overflow ID是209103.知道了,你可以识别我。但要向Stack Overflow证明你是Frank van Puffelen,要求你知道我的证书。
用户的ID经常在界面中公开。例如,如果您点击我的个人资料,您将看到我的ID。这对于识别我来说是必要的。如果您也使用相同的身份验证身份,那么曾经看过您的个人资料的每个人都可以在网站上冒充您。在安全方面不是一个好主意。
答案 1 :(得分:0)
以您的要求为例,如果您使用[GET] https://your-domain.com/api/users/$uid/balance
来检索用户数据,则此API完全不安全,任何人都可以使用随机的$ uid获得其他用户的数据。
按照评论(firebase文档)的建议,FirebaseUser.getToken()
将获得一个JWT令牌,您应该在后端使用firebase Admin SDK验证该令牌,这就是您可以信任的数据。 / p>
并且客户端方法现在应该更新为user.getIdToken()
。
https://firebase.google.com/docs/auth/admin/verify-id-tokens是更详细的参考。