【发布时间】:2018-09-05 07:11:23
【问题描述】:
我正在使用智威汤逊。为了加密令牌,我在 Java 中使用带有 base64EncodedSecretKey 的 HS512 签名算法。获得令牌后,我可以在不知道密钥的情况下解密令牌。这怎么可能?我的令牌有什么问题吗?
String JWT = Jwts.builder()
.signWith(SignatureAlgorithm.HS512, SECRET)
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATIONTIME))
.setAudience("ADMIN")
.compact();
这里JWT是我的令牌,我通过调用这个方法来设置密钥:
signWith(SignatureAlgorithm.HS512, SECRET)
字符串SECRET是我的钥匙。
但是当我通过邮递员使用正确的用户名和密码发出请求时,我在标题中收到了这个令牌:
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTUyMjkyMjAzOSwiYXVkIjoiQURNSU4ifQ.Wye52RTz8P3_7gPxZnJHOArA-ixaNHhQEcfoiAELu_56WXmMcZEAOlUyqP8yI0CWOZ4deXFRcP6azBpZpwNt-w
当我解密它时,我可以查看令牌数据:
{
alg: "HS512"
}.
{
sub: "admin",
exp: 1522922039,
aud: "ADMIN"
}
所以我的问题是:如何在不知道我的密钥的情况下解密 JWT?
【问题讨论】:
-
您的令牌未加密,仅经过签名。您只需要密钥来验证签名。
-
谢谢你,Robby Cornelissen 和 jmw5598