+-

我正在使用JWT.要加密令牌,我在 Java中使用HS512签名算法和base64EncodedSecretKey.获得令牌后,我能够在不知道密钥的情况下解密令牌.这怎么可能?我的令牌有什么问题吗?
String JWT = Jwts.builder()
.signWith(SignatureAlgorithm.HS512, SECRET)
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATIONTIME))
.setAudience("ADMIN")
.compact();
这里JWT是我的令牌,我通过调用这个方法来设置密钥:
signWith(SignatureAlgorithm.HS512, SECRET)
String SECRET是我的关键.
但是当我通过postman用正确的user_name和密码发出请求时,我在标题中收到了这个令牌:
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTUyMjkyMjAzOSwiYXVkIjoiQURNSU4ifQ.Wye52RTz8P3_7gPxZnJHOArA-ixaNHhQEcfoiAELu_56WXmMcZEAOlUyqP8yI0CWOZ4deXFRcP6azBpZpwNt-w
当我解密它时,我可以查看令牌数据:
{
alg: "HS512"
}.
{
sub: "admin",
exp: 1522922039,
aud: "ADMIN"
}
所以我的问题是:如何在不知道我的密钥的情况下解密JWT?
最佳答案
To encrypt the token I am using the HS512 signature algorithm […]
不,您没有加密令牌.你正在签名.
After I got the token I am able to decrypt the token without knowing the secret key […]
不,您没有解密令牌有效负载.你正在解码它.
令牌有效负载是编码为Base64的JSON字符串,并且不需要密钥来解码它.
JSON Web Token(JWT)是一种开放标准,它定义了一种紧凑且独立的方式,用于在各方之间作为JSON对象安全地传输信息.
JWT是以下类型令牌的通用名称:
> JSON Web Signature(JWS):对有效载荷进行编码和签名,以便验证索赔的完整性.
> JSON Web Encryption(JWE):他们的有效载荷已加密,因此声明对其他方隐藏.

图像是从page中提取的.
点击查看更多相关文章
转载注明原文:java – 为什么JSON Web令牌(JWT)解密而不知道密钥 - 乐贴网