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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了firebase如何发送一个有效负载包含下划线字符的JWT令牌?相关的知识,希望对你有一定的参考价值。

总结的问题

  • 具有下划线字符的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)时,成功验证并解码了令牌。

答案

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

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

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

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

如果是,那么记录在哪里

RFC 7519 JSON Web Token

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

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

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

here

以上是关于firebase如何发送一个有效负载包含下划线字符的JWT令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase Cloud Messaging 发送图像并使用数据有效负载发出通知

如何使用 Firebase Cloud Messaging 向所有用户发送数据负载?

如何本地化 Firebase 云消息通知?

如何使用 FCM 向 iOS 发送通知?

如何向包含 iOS 和 Android 设备的 Firebase 中的主题发送消息

解密/验证 Firebase 令牌