我使用这个库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是否安全?我应该使用到期日吗?
答案 0 :(得分:0)
是&否!,您的代码似乎还可以!
JWT是将加密的内容(例如cookie)放入客户端计算机中,然后它是您的api的票据。(我们通常在OAuth中使用jwt)
您可以确保未修改客户端计算机中的数据。然后,它是小型分布式会话管理的绝佳选择。
我应该使用失效日期吗?
是的,特别是对于会话管理。您不希望一个用户永久登录,也许另一个用户可以窃取他的会话。此令牌现在是他的用户名和密码。对此要小心!
安全吗?!
安全性有限制,一个重要的时间就是时间。每个密码都可以破解,但是要及时。最好不时更改密码。
尽管您的代码似乎是安全的,但是在许多其他情况下,黑客可能会侵入您的系统并获取您的秘密。您也应该注意它们。代码的所有部分(包括系统)都必须具有可接受的安全级别。 记住:
链条的强度仅取决于其最弱的链接