使用Java Auth0 JWT

时间:2017-06-19 21:29:17

标签: java jwt auth0

我使用这个库Aut0 Java JWT为我的使用Spring Framework的REST API实现了JSON Web Tokens。

这是代码

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.io.UnsupportedEncodingException;

public class JWTutils {
    private final static String secret = "fj32Jfv02Mq33g0f8ioDkw";

    public static String createToken(String email)
    {
        try {
            return JWT.create()
                    .withIssuer("auth0")
                    .withClaim("email", email)
                    .sign(Algorithm.HMAC256(secret));
        } catch (JWTCreationException exception){
            throw new RuntimeException("You need to enable Algorithm.HMAC256");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    public static String getEmailInToken(String token)
    {
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret))
                    .withIssuer("auth0")
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            return jwt.getClaim("email").asString();
        } catch (JWTDecodeException exception){
            return null;
        } catch (UnsupportedEncodingException e) {
            return null;
        }
    }
}

只要我使用HTTPS,我的JWT是否安全?我应该使用到期日吗?

1 个答案:

答案 0 :(得分:0)

是&否!,您的代码似乎还可以!

JWT是将加密的内容(例如cookie)放入客户端计算机中,然后它是您的api的票据。(我们通常在OAuth中使用jwt)

您可以确保未修改客户端计算机中的数据。然后,它是小型分布式会话管理的绝佳选择。

我应该使用失效日期吗?

是的,特别是对于会话管理。您不希望一个用户永久登录,也许另一个用户可以窃取他的会话。此令牌现在是他的用户名和密码。对此要小心!

安全吗?!

安全性有限制,一个重要的时间就是时间。每个密码都可以破解,但是要及时。最好不时更改密码。

尽管您的代码似乎是安全的,但是在许多其他情况下,黑客可能会侵入您的系统并获取您的秘密。您也应该注意它们。代码的所有部分(包括系统)都必须具有可接受的安全级别。 记住:

链条的强度仅取决于其最弱的链接