firebase如何发送一个有效负载包含下划线字符的JWT令牌?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了firebase如何发送一个有效负载包含下划线字符的JWT令牌?相关的知识,希望对你有一定的参考价值。
总结的问题
- 具有下划线字符的JWT令牌的有效负载是否有效?据我所知,它不能,因为它必须是base64编码。
- 如果没有,为什么firebase有时会生成这样的令牌?为什么firebase Admin SDK能够验证并解码它?
- 如果是,那么文档记录在哪里,如何在客户端上读取javascript中的有效负载(无需验证),因为
atob
将在这样的字符串上失败。
一些背景
我正在使用firebase进行身份验证。我想读取(不验证)id令牌的有效负载。我需要它来显示/隐藏UI中的内容,并且我使用了firebase documentation中描述的方法。
但是在某些情况下(我只在用我的facebook帐户登录时遇到它),令牌的有效负载包含_
,因此不是base64解码的。因此我在调用atob
时得到的错误。
这怎么可能?我从阅读JWT文档中了解到,有效载荷必须是base64编码的。除了下划线之外,所有字符实际上都是有效的base64字符。
然而,当我将它发送到firebase函数并在其上调用admin.auth().verifyIdToken(idToken)
时,成功验证并解码了令牌。
具有下划线字符的JWT令牌的有效负载是否有效?据我所知,它不能,因为它必须是base64编码。
JWT令牌是base64url编码的,与base64略有不同。它用+
将-
改为/
和_
并删除尾随的=
如果没有,为什么firebase有时会生成这样的令牌?为什么firebase Admin SDK能够验证并解码它?
_
是一个有效的char。往上看
如果是,那么记录在哪里
JWT表示为由句点('。')字符分隔的URL安全部分序列。每个部分都包含base64url编码的值。
如何在客户端上读取javascript中的有效负载(无需验证),因为atob将在这样的字符串上失败。
用-
替换+
和_
以获得base64。查看从/
中提取的示例函数
here
以上是关于firebase如何发送一个有效负载包含下划线字符的JWT令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Firebase Cloud Messaging 发送图像并使用数据有效负载发出通知
如何使用 Firebase Cloud Messaging 向所有用户发送数据负载?