如何生成与JWT.IO网站相同的签名?

时间:2016-07-04 19:48:37

标签: c# .net azure oauth jwt

JWT.IO网站有一个用于创建和验证JSON Web令牌的调试器。

当我将我的秘密字符串复制并粘贴到VERIFY SIGNATURE块中时,我可以看到它生成一个签名。

JWT.IO

我向下滚动页面,发现the .NET solution implemented by Microsoft。下载后,我添加了单元测试以手动生成签名。

Unit Test

但是,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网站完全相同的签名:

Use Base64UrlEncoder

1 个答案:

答案 0 :(得分:4)

@ Believe2014似乎jwt.io网站没有一些选项来指定base64编码,使用哪种方式来生成与单元测试相同的签名。

然而,根据第4节& RFC 4648中的5个,两个签名之间的差异对字节62使用不同的字符。 63以及是否省略填充字符=

因此,要将jwt.io生成的签名转换为您的签名,只需使用/代替_,使用+代替-,然后添加在签名结束时填充字符=