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编码安全的,但单元测试签名不是。
如何生成与JWT.IO网站相同的签名?
下面接受的答案向我指出the class Base64UrlEncoder
。我修改了单元测试以生成与JWT.IO网站完全相同的签名:
答案 0 :(得分:4)
@ Believe2014似乎jwt.io
网站没有一些选项来指定base64编码,使用哪种方式来生成与单元测试相同的签名。
然而,根据第4节& RFC 4648
中的5个,两个签名之间的差异对字节62
使用不同的字符。 63
以及是否省略填充字符=
。
因此,要将jwt.io
生成的签名转换为您的签名,只需使用/
代替_
,使用+
代替-
,然后添加在签名结束时填充字符=
。