Firebase Auth: 一小时后无法刷新管理员自定义令牌。

9 浏览
0 Comments

Firebase Auth: 一小时后无法刷新管理员自定义令牌。

我认为Firebase Admin SDK缺少一个非常重要的功能(或许是缺少相应的文档)。

简而言之:如何使用Admin SDK刷新自定义令牌?

文档(https://firebase.google.com/docs/auth/admin/manage-sessions)中提到:

Firebase身份验证会话是长期有效的。每次用户登录时,用户凭据会发送到Firebase身份验证后端,并交换为Firebase ID令牌(JWT)和刷新令牌。Firebase ID令牌的有效期较短,为1小时;刷新令牌可用于获取新的ID令牌。

好吧,但是怎么做呢?文档中没有提到如何用新的自定义令牌替换刷新令牌。有很多关于如何撤销刷新令牌等的文档...

然而,有一个REST API函数(https://firebase.google.com/docs/reference/rest/auth/#section-refresh-token)可以实现以下功能:

通过向securetoken.googleapis.com端点发出HTTP POST请求,可以刷新Firebase ID令牌。

然而,从这个API调用中获得的access_token(JWT)也不被接受。而且JWT的格式甚至不相似。以下是两个检索到(解码的)自定义令牌的示例:

i. 使用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团队的某人能最终回答。请参阅以下链接。

感谢您的时间!

0
0 Comments

Firebase Auth : Admin自定义令牌在一小时后无法刷新的原因和解决方法

问题出现的原因:

根据上述所提供的内容,可以得出以下结论:

- 使用Firebase Android SDK时,不需要手动刷新自定义令牌。

- 如果使用iOS或Android SDK并且遇到了这个问题,可能是设置问题。

- Firebase SDK会在正确设置的情况下自动刷新令牌。

- FirebaseAuth的signInWithCustomToken函数被调用后,SDK会负责保持令牌的更新。

解决方法:

- 确保Android应用程序的SHA1证书在Firebase管理控制台中。

- 添加SHA1证书后,需要下载google-services.json文件并将其添加到应用程序中。

根据上述内容,我们可以得出结论:使用Firebase Auth : Admin自定义令牌时,如果遇到无法刷新令牌的问题,可能是由于设置问题导致的。要解决此问题,首先确保Android应用程序的SHA1证书已添加到Firebase管理控制台,并下载并添加google-services.json文件。这样,SDK将能够自动刷新令牌,确保令牌始终处于最新状态。

// 示例代码
// 初始化Firebase Admin SDK
var admin = require("firebase-admin");
// 设置服务帐户密钥
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://.firebaseio.com"
});
// 创建自定义令牌
var uid = "some-uid";
admin.auth().createCustomToken(uid)
  .then(function(customToken) {
    // 使用自定义令牌进行身份认证
    return admin.auth().signInWithCustomToken(customToken);
  })
  .catch(function(error) {
    console.log("Error authenticating with custom token:", error);
  });

0
0 Comments

Firebase Auth : Admin custom tokens cannot be refreshed after one hour

Firebase Auth的Admin自定义令牌在一小时后无法刷新

问题原因:Firebase Auth的Admin自定义令牌在生成后的一小时内有效,过期后无法刷新。

解决方法:生成新的自定义令牌并用其交换访问令牌或刷新令牌。

具体操作步骤如下:

1. 在Firebase Cloud Functions中生成自定义令牌:

首先,确保已经设置好Firebase项目和Cloud Functions。然后,创建一个Cloud Functions的index.ts文件,代码如下:

import * as functions from 'firebase-functions';
import * as admin from "firebase-admin";
export const getCustomToken = functions.https.onRequest((request, response) => {
  if (admin.apps.length < 1) {   //Checks if app already initialized
    admin.initializeApp();
  }
  const uid = "USER_UUID"; //替换为实际的用户UUID
  admin.auth().createCustomToken(uid)
    .then(function(customToken) {
      console.log(customToken.toString);
      response.send(customToken);
    })
    .catch(function(error) {
      console.log("Error creating custom token:", error);
    });
});

2. 发起HTTP GET请求来获取自定义令牌:

请求URL为:

https://us-central1-.cloudfunctions.net/getCustomToken

返回的响应将包含自定义令牌。

3. 通过发起HTTP POST请求来交换自定义令牌以获取访问令牌和刷新令牌:

请求URL为:

https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=

请求体为:

{

"token":"<自定义令牌>",

"returnSecureToken":true

}

返回的响应将包含访问令牌、刷新令牌以及有效期。

需要注意的是,在获取访问令牌和刷新令牌后,可以根据需要在任何地方使用。

以上就是解决Firebase Auth的Admin自定义令牌无法刷新的方法。希望对你有所帮助!

0
0 Comments

Firebase Auth :Admin自定义令牌在一小时后无法刷新的原因及解决方法

在Firebase中,您需要将自定义令牌(custom token)交换为Id Token和Refresh Token。可以在这里找到相关信息。调用应包括自定义令牌和属性“returnSecureToken”,值为true。如果未添加此属性或属性值为false,则只会获得Id Token。

完成上述步骤后,您可以使用Refresh Token在其过期后获取新的Id Token。请参阅文档

自定义令牌和Id Token都是短期的(1小时),但用途不同,因此格式也不同。使用Id Token进行身份验证调用,而自定义令牌仅用于启动会话并获取Id Token和Refresh Token。

请注意,如果您使用的是SDK,则整个过程由SDK处理。

那么,在admin-sdk中的verifyToken方法会发生什么?如果验证发送的令牌,那么它是否有效?

当您从客户端向服务器发送请求时,将随请求发送当前的Id Token。然后,您将使用verifyToken函数验证请求是否来自有效来源。

0