Firebase 身份验证 : Admin custom tokens cannot be refreshed after one hour

标签 firebase firebase-authentication

我认为 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/

相关文章:

git - 我应该将 google-services.json(来自 Firebase)添加到我的存储库吗?

android - 选中复选框时添加值

android - FirebasePushNotificationPlugin(xamarin) - 当应用程序在后台时不会触发事件(android)

ios - 在 firebase 上链接多个身份验证提供程序

javascript - [ EmailPasswordAuthProvider, EmailAuthProvider ] 之间有什么区别

firebase - 在 golang 应用程序中初始化 firebase 时出错

angular - 错误错误 : InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'

ios - 如何在 Swift 中使用 Firebase 处理离线注销?

swift - 检索数据 Firebase Swift 3

ios - 如何使用 firebase 和 Xcode 将不同的用户发送到单独的 View Controller