我认为Firebase Admin SDK缺少了一个非常重要的功能(或者可能是它的文档)。
TL; DR:您如何使用Admin SDK刷新自定义令牌?
文档(https://firebase.google.com/docs/auth/admin/manage-sessions)说:
Firebase身份验证会话是长期有效的。每次用户登录时,用户凭据都会发送到Firebase身份验证后端,并交换为Firebase ID令牌(JWT)和刷新令牌。Firebase ID令牌的有效期很短,持续一个小时;刷新令牌可用于检索新的ID令牌。
好吧。但是怎么做?没有提到如何用新的自定义令牌替换刷新令牌。有很多关于如何撤销刷新令牌等的文档。
然而,有一个REST API函数说,(https://firebase.google.com/docs/reference/rest/auth/#section-refresh-token)
将刷新令牌交换为ID令牌您可以通过向securetoken.googleapis.com端点发出HTTP POST请求来刷新Firebase ID令牌。
然而,您从这个API调用中获得的access_token(JWT)也不被接受。JWT的格式甚至不相似。下面是检索(解码)的自定义令牌的两个示例:i.使用Admin SDK的admin.auth(). admin CustomToken(uid)方法
{
"uid": "9N5veUXXXXX7eHOLB4ilwFexQs42",
"iat": 1521047461,
"exp": 1521051061,
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iss": "[email protected]",
"sub": "[email protected]"
}
字符串
二、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": "[email protected]",
"email_verified": false,
"firebase": {
"identities": {
"email": [
"[email protected]"
]
},
"sign_in_provider": "password"
}
}
型
关于这个主题有很多问题。也许Firebase团队的某个人可以一劳永逸地回答它。请参阅下面的链接
谢谢你的时间!!
4条答案
按热度按时间sirbozc51#
您需要将自定义令牌交换为ID令牌和Refresh令牌,这在这里提到。调用应包含自定义令牌和属性“returnSecureToken”为true。如果此属性未添加或为false,则仅获得ID令牌。
完成此操作后,您可以使用刷新令牌在ID令牌过期后获取新的ID令牌。请参阅文档。
自定义令牌和ID令牌都是短暂的(1小时),但用途不同,这就是格式不同的原因。您使用ID令牌进行身份验证呼叫,而自定义令牌仅用于启动会话并获取ID令牌和刷新令牌。
请记住,如果您使用的是SDK,则整个工作都由SDK处理。
htrmnn0y2#
您不刷新已经存在的自定义令牌,而是创建新令牌并将其交换为访问令牌或刷新令牌。
通过Firebase云函数生成自定义令牌
假设你有你的firebase项目和Cloud Functions for Firebase都设置好了。
这就是Cloud Functions index.ts文件的样子:
字符串
HTTP GET请求看起来像这样:
型
响应如下所示:
型
最有可能的是,如果没有启用IAM(身份和访问管理),您将不得不启用并设置服务帐户凭据。
用自定义代币兑换充值和访问代币
HTTP POST请求看起来像这样:
型
身体就像:
型
响应如下所示:
型
祝你好运,
at0kjp5o3#
如何使用Admin SDK刷新自定义token?
答:如果你使用的是Firebase的Android SDK,你应该永远不必这样做。如果你问这个问题,并且使用的是iOS或Android SDK,你可能有一个设置问题。如果你正确设置,SDK将处理所有令牌的刷新。我使用FirebaseAuth的signInWithCustomToken,遇到了同样的问题。
An overview of Firebase tokens
The SDK has 1 hour to USE THE CUSTOM TOKEN如果你读了整个对话,忽略了抱怨,它列出了问题。
一旦FirebaseAuth的signInWithCustomToken函数被调用,SDK将负责保持令牌的最新状态(如果您设置正确的话)。For more info
您的Android应用程序的SHA1证书必须位于Firebase管理控制台中。添加SHA1证书后,您需要下载google-services.json文件并将其添加到您的应用程序中。我接管了一个仍在开发中的应用程序的Firebase帐户,并遇到了这个问题。
eoigrqb64#
你没有提到编程语言,但在Java中,这样的东西对我来说很有效:
字符串
发出POST请求等。请注意,响应应解析为JSON,然后ID令牌在“.idToken”中,刷新令牌在“.refreshToken”中。
然后,如果您需要手动使用刷新令牌,则可以按照此处找到的Google文档再次使用REST API。