我认为 Firebase Admin SDK 缺少一个非常重要的功能(或者可能是其文档)。
TL; DR:如何使用 Admin SDK 刷新自定义 token ?
文档 ( https://firebase.google.com/docs/auth/admin/manage-sessions ) 说:
Firebase Authentication sessions are long lived. Every time a user signs in, the user credentials are sent to the Firebase Authentication backend and exchanged for a Firebase ID token (a JWT) and refresh token. Firebase ID tokens are short lived and last for an hour; the refresh token can be used to retrieve new ID tokens.
好的。但如何呢?没有提及如何用新的自定义 token 替换刷新 token 。有很多关于如何撤销刷新 token 等的文档...
然而,有一个 REST api 函数说: (https://firebase.google.com/docs/reference/rest/auth/#section-refresh-token)
Exchange a refresh token for an ID token You can refresh a Firebase ID token by issuing an HTTP POST request to the securetoken.googleapis.com endpoint.
但是,您从此 API 调用获得的 access_token (JWT) 也不被接受。 JWT 的格式甚至不相似。以下是检索(解码)的自定义 token 的两个示例: 我。使用 Admin SDK 的 admin.auth().createCustomToken(uid) 方法
{
"uid": "9N5veUXXXXX7eHOLB4ilwFexQs42",
"iat": 1521047461,
"exp": 1521051061,
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iss": "XXX@appspot.gserviceaccount.com",
"sub": "XXX@appspot.gserviceaccount.com"
}
ii.与 https://securetoken.googleapis.com/v1/token?key=[API_KEY]调用
{
"iss": "https://securetoken.google.com/XXX",
"aud": "XXX",
"auth_time": 1521047461,
"user_id": "9N5veUXXXXX7eHOLB4ilwFexQs42",
"sub": "9N5veUXXXXX7eHOLB4ilwFexQs42",
"iat": 1521051719,
"exp": 1521055319,
"email": "jabbar@gmail.com",
"email_verified": false,
"firebase": {
"identities": {
"email": [
"jabbar@gmail.com"
]
},
"sign_in_provider": "password"
}
}
关于这个主题提出了很多问题。也许 Firebase 团队的某个人可以一劳永逸地回答这个问题。请参阅下面的链接
感谢您的宝贵时间!!
最佳答案
您需要将自定义 token 交换为 Id token 和刷新 token ,这提到了 here 。该调用应包含自定义 token 和属性“returnSecureToken”为 true。如果没有添加该属性或者该属性为 false,您将只能获得 ID Token。
完成此操作后,您可以使用刷新 token 在过期后获取新的 ID token 。请参阅documentation .
自定义 token 和 ID token 的生命周期都很短(1 小时),但用途不同,因此格式不同。您使用 Id token 进行经过身份验证的调用,而自定义 token 仅用于启动 session 并获取 ID token 和刷新 token 。
请记住,如果您使用 SDK,则整个工作都由 SDK 处理。
关于Firebase 身份验证 : Admin custom tokens cannot be refreshed after one hour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49287144/