Auth0-Jwt奇怪的行为
我想使用Auth0-Jwt奇怪的行为,jwt,auth0,Jwt,Auth0,我想使用jwt作为身份验证机制,所以我选择auth0jwtjavalibs。为了实现身份验证服务,我做了一个关于令牌验证的测试。测试很简单,请使用以下令牌: { "alg":"HS256", "typ": "JWT" } { "sub": "dummySubject", "exp": "1498054620653" } 使用supersecretpassphrase验证签名。考虑到这一点,我希望返回这个(由jwt.io获取)标记: 但测试失败了。返回的令牌是: eyJ0eXAiOiJKV1
jwt
作为身份验证机制,所以我选择auth0jwt
javalibs。为了实现身份验证服务,我做了一个关于令牌验证的测试。测试很简单,请使用以下令牌:
{ "alg":"HS256", "typ": "JWT" }
{ "sub": "dummySubject", "exp": "1498054620653" }
使用supersecretpassphrase
验证签名。考虑到这一点,我希望返回这个(由jwt.io获取)标记:
但测试失败了。返回的令牌是:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkdW1teVN1YmplY3QiLCJleHAiOjE0OTgwNTQ2MjB9.2dOy3HmWH7vMWiJoQvMOUsx2nR6l6phZ1nwIz-TSkNk
jwt.io表示该令牌具有以下形状:
{ "typ": "JWT", "alg": "HS256" }
{ "sub": "dummySubject", "exp": "1498054620" }
它看起来像是exp
松开了它的毫秒。以下是我填写代币的方式:
private String computeToken(JwtToken token) throws Exception {
Algorithm algorithmHS = Algorithm.HMAC256(passphrase);
Date expirationTime = new Date(token.getExpirationTime().toInstant().toEpochMilli());
Builder jwtToken = JWT.create().withSubject(token.getSubject()).withExpiresAt(expirationTime);
Iterator<Entry<String, Object>> candidateClaimsIterator = token.getPayload().entrySet().iterator();
...
return jwtToken.sign(algorithmHS);
}
当com.auth0.jwt.JWTCreator在JSON字符串中转换
exp
时,似乎java.util.Date
释放了毫秒。我做错什么了吗?这是预期的行为吗?jwt使用秒,而不是毫秒,有关详细信息,请参阅我的答案details@jps我完全错过了。谢谢。可能是你的副本
private String computeToken(JwtToken token) throws Exception {
Algorithm algorithmHS = Algorithm.HMAC256(passphrase);
Date expirationTime = new Date(token.getExpirationTime().toInstant().toEpochMilli());
Builder jwtToken = JWT.create().withSubject(token.getSubject()).withExpiresAt(expirationTime);
Iterator<Entry<String, Object>> candidateClaimsIterator = token.getPayload().entrySet().iterator();
...
return jwtToken.sign(algorithmHS);
}
public class JwtToken implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "Subject can not be null")
@Size(min = 10)
private String subject;
@NotNull(message = "Expiration time can not be null")
private ZonedDateTime expirationTime;
private Map<String, Object> payload;
...
(getters and setters)
}