根据我的理解,验证JWT签名是一个直接的过程.但是,当我使用一些在线工具为我做这件事时,它并不匹配.如何在JWT不使用JWT库的情况下手动验证签名?我需要一种快速方法(使用可用的在线工具)来演示如何完成此操作.
我JWT在https://jwt.io/#debugger-io上创建了我的以下信息:
HS256hONPMX3tHWIp9jwLDtoCUwFAtH0RwSK6
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
智威汤逊:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.wDQ2mU5n89f2HsHm1dluHGNebbXeNr748yJ9kUNDNCA
手动JWT签名验证尝试:
使用base64UrlEncode计算器(http://www.simplycalc.com/base64url-encode.php或https://www.base64encode.org/)
如果我:( 不是站点上的实际值,修改后显示最终为我构建的工具)
base64UrlEncode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9") + "." + base64UrlEncode("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")
我明白了:
ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5.ZXlKemRXSWlPaUl4TWpNME5UWTNPRGt3SWl3aWJtRnRaU0k2SWtwdmFHNGdSRzlsSWl3aWFXRjBJam94TlRFMk1qTTVNREl5ZlE=
注意:如果我应该对已经编码的值进行编码,或者按原样使用已经编码的值,那么我会有一些困惑.
(即使用
base64UrlEncode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9") + "." + base64UrlEncode("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")vs"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ").无论我应该做什么,最终结果仍然与签名不符.我倾向于认为我应该不重新编码的编码值,不管是真还是假.
然后使用HMAC Generator计算器(https://codebeautify.org/hmac-generator或https://www.freeformatter.com/hmac-generator.html#ad-output)
(不是网站上的实际价值,经过修改以显示最终为我构建的工具)
HMACSHA256( …
jwt ×1