我们正在开始开发一个 Web 应用程序,并考虑使用 Firebase 身份验证来处理我们的注册流程。但是,我们不确定 ID 令牌验证的工作原理。似乎可以在 Firebase 领域之外使用其令牌来验证用户。我们正在考虑在 Google Kubernetes Engine 上开发一个 Node.js 应用程序——据我所知,它没有与 Firebase 身份验证集成。
Firebase 提供了这个example https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_the_firebase_admin_sdk关于如何使用 Firebase Admin SDK 验证 ID 令牌:
// idToken comes from the client app (shown above)
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
// ...
}).catch(function(error) {
// Handle error
});
我的问题是 Firebase 是否必须调用其服务器才能验证每个用户请求的 ID 令牌(这会增加延迟),或者它是否会长时间缓存验证令牌所需的加密密钥——我认为这就是它的工作原理。
你打电话时verifyIdToken
,Admin SDK 使用公钥对令牌进行解码并验证签名是否有效。它从 Google 的服务器下载此密钥,但会缓存 24 小时(因为它几乎不会更改)。验证令牌后,它可以选择检查令牌是否被撤销,这需要再次调用 Firebase 身份验证服务器。每次调用都会发生此请求verifyIdToken
.
您可以根据以下内容检查这一点源代码 https://github.com/firebase/firebase-admin-node/blob/6c7c326e2c60bc06dcfa6a9fade4b187e21cdb9b/src/auth/auth.ts#L132.
- verifyIdToken https://github.com/firebase/firebase-admin-node/blob/6c7c326e2c60bc06dcfa6a9fade4b187e21cdb9b/src/auth/auth.ts#L132
- fetchPublicKeys https://github.com/firebase/firebase-admin-node/blob/84d8a4fcd305398ff0737bf3cae963afe21df42b/src/auth/token-verifier.ts#L261
- verifyJWT https://github.com/firebase/firebase-admin-node/blob/6c7c326e2c60bc06dcfa6a9fade4b187e21cdb9b/src/auth/token-verifier.ts#L136
- verifyDecodedJWTNotRevoked https://github.com/firebase/firebase-admin-node/blob/6c7c326e2c60bc06dcfa6a9fade4b187e21cdb9b/src/auth/auth.ts#L429
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)