从 Web SDK 访问 Firebase 自定义令牌声明

Posted

技术标签:

【中文标题】从 Web SDK 访问 Firebase 自定义令牌声明【英文标题】:Access Firebase Custom Token claims from the Web SDK 【发布时间】:2017-09-05 20:23:57 【问题描述】:

如果我有一个带有某些声明的自定义令牌并使用它登录 Firebase,是否有任何方法可以使用 Web SDK 从应用内部访问这些声明?

例如,如果我的自定义令牌是这样的


 :iss => $service_account_email,
 :sub => $service_account_email,
 :aud => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
 :iat => now_seconds,
 :exp => now_seconds+(60*60), # Maximum expiration time is one hour
 :uid => uid,
 :claims => :premium_account => is_premium_account

我想知道是否有类似(从应用程序内部):

firebase.auth.token.claims.premium_account

我在文档中没有找到类似的内容。

【问题讨论】:

***.com/questions/39917020/… 谢谢@bojeil。所以看起来它无法从 sdk 访问... 【参考方案1】:

看起来你想要getIdTokenResult:

await firebase.auth().currentUser.getIdTokenResult()

【讨论】:

【参考方案2】:

claims 嵌入在令牌中。

以下是在 Web 客户端上使用 jwt-decode 从令牌中提取声明的示例代码:

import jwt_decode from './jwt-decode';

firebase.auth().currentUser.getToken().then((token) => 
    console.log(token);
    console.log(jwt_decode(token));
);

【讨论】:

【参考方案3】:

这是关于它的文档:https://firebase.google.com/docs/auth/admin/custom-claims

我认为它的要点是,一旦您通过后端代码(admin sdk 或 firebase 函数)向用户附加了自定义声明,您就可以对 currentUser 令牌进行 base64 解码。 该文档引用了一篇关于 javascript base64 解码的 mozilla 文章:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

您可以 JSON.parse 解码的令牌,您的自定义声明将显示在那里。文档非常好。

【讨论】:

以上是关于从 Web SDK 访问 Firebase 自定义令牌声明的主要内容,如果未能解决你的问题,请参考以下文章

“调用者没有权限”尝试使用 Firebase Admin SDK 创建自定义令牌

Firebase Web SDK 3.x ServerValue 时间戳?

Firebase 不接受从 Google Identity Platform 的 REST API 获取的 JWT:“自定义令牌格式不正确。”

“Web”客户端类型不允许使用自定义方案 URI - Google with Firebase

如何从 ViewStart 中访问(自定义)Web 助手?

FBX SDK 访问自定义属性