firebase如何发送一个有效负载包含下划线字符的JWT令牌?

问题描述 投票:0回答:1

总结的问题

  • 具有下划线字符的JWT令牌的有效负载是否有效?据我所知,它不能,因为它必须是base64编码。
  • 如果没有,为什么firebase有时会生成这样的令牌?为什么firebase Admin SDK能够验证并解码它?
  • 如果是,那么文档记录在哪里,如何在客户端上读取javascript中的有效负载(无需验证),因为atob将在这样的字符串上失败。

一些背景

我正在使用firebase进行身份验证。我想读取(不验证)id令牌的有效负载。我需要它来显示/隐藏UI中的内容,并且我使用了firebase documentation中描述的方法。

但是在某些情况下(我只在用我的facebook帐户登录时遇到它),令牌的有效负载包含_,因此不是base64解码的。因此我在调用atob时得到的错误。

enter image description here

这怎么可能?我从阅读JWT文档中了解到,有效载荷必须是base64编码的。除了下划线之外,所有字符实际上都是有效的base64字符。

然而,当我将它发送到firebase函数并在其上调用admin.auth().verifyIdToken(idToken)时,成功验证并解码了令牌。

javascript firebase jwt
1个回答
3
投票

具有下划线字符的JWT令牌的有效负载是否有效?据我所知,它不能,因为它必须是base64编码。

JWT令牌是base64url编码的,与base64略有不同。它用+-改为/_并删除尾随的=

如果没有,为什么firebase有时会生成这样的令牌?为什么firebase Admin SDK能够验证并解码它?

_是一个有效的char。往上看

如果是,那么记录在哪里

RFC 7519 JSON Web Token

JWT表示为由句点('。')字符分隔的URL安全部分序列。每个部分都包含base64url编码的值。

如何在客户端上读取javascript中的有效负载(无需验证),因为atob将在这样的字符串上失败。

-替换+_以获得base64。查看从/中提取的示例函数

here
© www.soinside.com 2019 - 2024. All rights reserved.