【发布时间】:2016-12-20 17:06:33
【问题描述】:
我正在使用 JJWT 库生成我的 JWT 令牌。我按如下方式生成我的令牌。我使用虚拟值作为我的密钥。
我们可以假设jwt.security.key=security-key
@Value("${jwt.security.key}")
private String key;
@Value("${ws.issuer}")
private String issuer;
static final long ONE_MINUTE_IN_MILLIS=60000;
static final long TOKEN_DURATION_IN_MIN=30L;
private SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
@Override
public String issueToken(String userName) {
long nowMillis = System.currentTimeMillis();
long expMillis = nowMillis + (ONE_MINUTE_IN_MILLIS * TOKEN_DURATION_IN_MIN);
return Jwts
.builder()
.setId("01")
.setIssuedAt(new Date(nowMillis))
.setHeaderParam("typ","JWT")
.setSubject(userName)
.setIssuer(issuer)
.setExpiration(new Date(expMillis))
.signWith(signatureAlgorithm, key).compact();
}
虽然令牌可以成功解码。每次我从 jwt.io 调试器验证它的签名时,它总是导致签名无效。可以看到here。
【问题讨论】:
-
您是否尝试在“解码”选项卡的“验证签名”中设置用于对令牌进行编码的密码?它应该这样工作。要验证 JWT,您需要知道秘密,只有客户端应该假设正文是正确的。
-
我认为验证器被 jwt.io 破坏了(显然仍然如此)。绕过他们的验证检查,并在我的应用程序中这样做证明我的密钥正确验证。
标签: java jwt json-web-token jjwt