从 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:“自定义令牌格式不正确。”