Firebase管理员:是否有必要检查服务器上解码的uid(基于客户端ID令牌)是否与客户端的uid相匹配?
[在我的服务器中,我通过传递Firebase uid
作为参数(即GET /users/:uid
)来访问用户特定的数据。我还从Firebase客户端生成ID令牌,并在服务器上对该令牌进行解码以获取uid
。然后,我检查这两个uid
是否相同。
基于Firebase处理令牌的方式,这是否必要?还是Firebase可以有效地确定请求的uid
参数(使用Auth.auth().getUserId
生成和令牌(使用Auth.auth().generateIdToken()
生成))不是来自同一用户?
注意:我没有使用Firebase数据库,所以我没有数据库权限的额外安全性。
回答如下:Firebase管理员文档建议采用以下方法来验证服务器上当前登录的用户。
如果您的Firebase客户端应用程序与自定义后端服务器通信,则可能需要识别该服务器上当前登录的用户。为了安全地执行此操作,请在成功登录后使用HTTPS将用户的ID令牌发送到您的服务器。然后,在服务器上,验证ID令牌的完整性和真实性,并从中检索
uid
。您可以使用以这种方式发送的uid
来安全标识服务器上当前登录的用户。
因此,您只需要在客户端上获取用户的ID令牌,然后使用HTTPS
将其发送到服务器即可。这足以安全地验证用户的身份。
服务器代码(node.js)
// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
let uid = decodedToken.uid;
// ...
}).catch(function(error) {
// Handle error
});
请参见Firebase管理员文档:Verify ID Tokens
Firebase管理员:是否有必要检查服务器上解码的uid(基于客户端ID令牌)是否与客户端的uid相匹配?
[在我的服务器中,我通过传递Firebase uid
作为参数(即GET /users/:uid
)来访问用户特定的数据。我还从Firebase客户端生成ID令牌,并在服务器上对该令牌进行解码以获取uid
。然后,我检查这两个uid
是否相同。
基于Firebase处理令牌的方式,这是否必要?还是Firebase可以有效地确定请求的uid
参数(使用Auth.auth().getUserId
生成和令牌(使用Auth.auth().generateIdToken()
生成))不是来自同一用户?
注意:我没有使用Firebase数据库,所以我没有数据库权限的额外安全性。
回答如下:Firebase管理员文档建议采用以下方法来验证服务器上当前登录的用户。
如果您的Firebase客户端应用程序与自定义后端服务器通信,则可能需要识别该服务器上当前登录的用户。为了安全地执行此操作,请在成功登录后使用HTTPS将用户的ID令牌发送到您的服务器。然后,在服务器上,验证ID令牌的完整性和真实性,并从中检索
uid
。您可以使用以这种方式发送的uid
来安全标识服务器上当前登录的用户。
因此,您只需要在客户端上获取用户的ID令牌,然后使用HTTPS
将其发送到服务器即可。这足以安全地验证用户的身份。
服务器代码(node.js)
// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
let uid = decodedToken.uid;
// ...
}).catch(function(error) {
// Handle error
});
请参见Firebase管理员文档:Verify ID Tokens