+-
java – 为什么JSON Web令牌(JWT)解密而不知道密钥
我正在使用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):他们的有效载荷已加密,因此声明对其他方隐藏.

JWT, JWS and JWE
图像是从page中提取的.

点击查看更多相关文章

转载注明原文:java – 为什么JSON Web令牌(JWT)解密而不知道密钥 - 乐贴网