JWT 令牌过期检查

Dev*_*per 4 java jwt

我有一个以下实用程序类,但是每当我通过验证方法检查过期的令牌时,它都不会抛出JWtVerificationException.

public class Token {

    private static String SECRET = "c3bff416-993f-4760-9275-132b00256944";

    public static String get(String name, String value) throws UnsupportedEncodingException {
        return JWT.create()
                .withIssuer("auth0")
                .withClaim(name, value)
                .withClaim("random", String.valueOf(UUID.randomUUID()))
                .withExpiresAt(new Date(System.currentTimeMillis() + (4 * 60 * 60 * 1000)))
                .sign(Algorithm.HMAC256(Token.SECRET));
    }

    public static DecodedJWT verify(String token) throws JWTVerificationException, UnsupportedEncodingException {
        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(Token.SECRET))
                .withIssuer("auth0")
                .acceptExpiresAt(4)
                .build();

        return verifier.verify(token);
    }

}
Run Code Online (Sandbox Code Playgroud)

根据网站https://github.com/auth0/java-jwt

验证令牌时,时间验证会自动发生,从而导致JWTVerificationException在值无效时抛出异常。

编辑:

当客户端每 5 分钟更新一次令牌时,接下来的工作是否有效,或者我应该添加几秒钟来适应任何网络延迟?

创造

.withExpiresAt(new Date(System.currentTimeMillis() + (5 * 60 * 1000))) // 5 minutes
Run Code Online (Sandbox Code Playgroud)

核实

.acceptExpiresAt(5 * 60) // accept expiry of 5 minutes
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 5

JWT.create().withExpiresAt(new Date(System.currentTimeMillis() + (5 * 60 * 1000))) 意味着您将创建一个令牌,该令牌将在 5 分钟后过期。看起来不错。

JWT.require(xxx).acceptExpiresAt(5 * 60)意味着您将接受 5 分钟前已经过期的 令牌。即使考虑到网络延迟,5 分钟的余地仍然太长。应该在几秒钟内。