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)
}