【问题标题】:Auth0 JWT with Java使用 Java 的 Auth0 JWT
【发布时间】:2017-11-22 05:48:54
【问题描述】:

我使用这个库 Aut0 Java JWT 为我使用 Spring 框架的 REST API 实现了 JSON Web 令牌。

这里是代码

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 就安全吗?我应该使用到期日期吗?

【问题讨论】:

  • 定义“安全”。即,您试图保护哪种威胁模型?
  • 这将是一个公共应用程序,因此可能的威胁是人们能够根据电子邮件地址(某些用户公开)生成令牌。如果我必须重新提出问题,我会说“我对库的使用是否正确,SHA256 是否牢不可破?”
  • 令牌加密只适用于知道密钥的人。您的标头和正文将使用 base64 加密,并且可以很容易地解密。 Jwt 不是加密数据的方法,它是基于 header + body + secret_key 创建一些签名进行验证

标签: java jwt auth0


【解决方案1】:

Yes & No!,您的代码似乎没问题!

JWT 就是把加密的东西(比如cookies)放到客户端的电脑里,然后它就是你的api的ticket。(我们通常在OAuth中使用jwt)

您可以确保您在客户计算机中的数据没有被修改。那么它是小型分布式会话管理的绝佳选择。

我应该使用到期日期吗?

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

安全吗?!

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

虽然您的代码似乎是安全的,但在许多其他情况下,黑客可以侵入您的系统并获取您的秘密。您也应该了解它们。包括系统在内的代码的所有部分都必须具有可接受的安全级别。 记住:

链条的强度取决于其最薄弱的环节

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 2016-09-14
    • 2020-11-07
    • 2017-01-23
    • 1970-01-01
    • 2016-11-15
    • 2019-06-03
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多