如何生成与 JWT.IO 网站相同的签名?
Posted
技术标签:
【中文标题】如何生成与 JWT.IO 网站相同的签名?【英文标题】:How to generate the same signature as the JWT.IO website does? 【发布时间】:2016-11-06 13:55:17 【问题描述】:JWT.IO 网站有一个调试器,用于创建和验证 JSON Web 令牌。
当我将我的秘密字符串复制并粘贴到 VERIFY SIGNATURE 块中时,我可以看到它生成了一个签名。
我向下滚动页面,找到the .NET solution implemented by Microsoft。下载后,我添加我的单元测试以手动生成签名。
但是,JWT.IO 网站生成的签名与我的单元测试生成的签名略有不同。
Secrect string: "THIS IS A SECRET STRING WHICH CAN BE SHARED BETWEEN THE SERVICES"
Unit test signature: "B0d57pcHoDiTDE/98dyrMx9HoFKGLOcM094eYBgJqHo="
JWT.IO signature: B0d57pcHoDiTDE_98dyrMx9HoFKGLOcM094eYBgJqHo
我注意到 JWT.IO 签名字符串是 URL 编码安全的,但单元测试签名不是。
更新
下面接受的答案将我指向the class Base64UrlEncoder
。我已经修改了我的单元测试以生成与 JWT.IO 网站完全相同的签名:
【问题讨论】:
【参考方案1】:@Believe2014 jwt.io
网站似乎没有一些选项来指定 base64 编码,使用哪种 URLEncoding 方式生成与您的单元测试相同的签名。
但是,根据RFC 4648
的第 4 和 5 部分,两种签名之间的区别在于使用不同的字符来表示字节 62
和 63
以及是否省略了填充字符 =
。
因此,要将jwt.io
生成的签名转换为您的签名,只需使用/
而不是_
,使用+
而不是-
,并在签名末尾添加填充字符=
.
【讨论】:
感谢您的回答。我可以在 Mircosoft 的源代码中找到类Base64UrlEncoder
,它执行与您描述的类似的替换步骤。 github.com/AzureAD/…以上是关于如何生成与 JWT.IO 网站相同的签名?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jsonwebtoken 库生成的 JWT 令牌在 jwt.io 中提供了无效签名
http://jwt.io 如何检索 keycloak 签名密钥?
Python JWT 库 PyJWT 使用 HS256 签名时遇到问题 - 使用 SHA-256 哈希算法的 HMAC