使用 Java 的 Auth0 JWT
Posted
技术标签:
【中文标题】使用 Java 的 Auth0 JWT【英文标题】:Auth0 JWT with Java 【发布时间】: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 创建一些签名进行验证 【参考方案1】:Yes & No!,您的代码似乎没问题!
JWT 就是把加密的东西(比如cookies)放到客户端的电脑里,然后它就是你的api的ticket。(我们通常在OAuth中使用jwt)
您可以确保您在客户计算机中的数据没有被修改。那么它是小型分布式会话管理的绝佳选择。
我应该使用到期日期吗?
是的,特别是对于会话管理。您不希望一个用户永远登录,也许另一个用户能够窃取他的会话。这个令牌现在是他的用户名和密码。小心这个!
安全吗?!
安全有限制,一个重要的就是时间。每个密码都是可以破解的,但有时间限制。你最好不时更改你的密码。
虽然您的代码似乎是安全的,但在许多其他情况下,黑客可以侵入您的系统并获取您的秘密。您也应该了解它们。包括系统在内的代码的所有部分都必须具有可接受的安全级别。 记住:
链条的强度取决于其最薄弱的环节
【讨论】:
以上是关于使用 Java 的 Auth0 JWT的主要内容,如果未能解决你的问题,请参考以下文章
ClassNotFoundException:com.auth0.jwt.algorithms.Algorithm
ClassNotFoundException: com.auth0.jwt.exceptions.JWTCreationException 与 DocuSignApi Java SDK
有没有办法在同一个项目中同时使用 auth0-spring-security-api 和 java-jwt?