JWT实现身份认证
1、什么是JWT
JSONWebtoken(JWT)是一种开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。可以验证和信任此信息,因为它是数字签名的。JWT可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥进行签名。
2、为什么要使用JWT
通过相同的密钥的加解密操作,能够很方便的在集群部署网站中轻松实现sso(单点登录)。同时不需要持久化操作,简单易用。
3、如何使用JWT
JWT包含三部分内容:header、playload、signature。header包含jwt的类型和加密算法,playload主要是我们允许在token中传递的部分参数,password等安全要求高的不要放在里面。signature是签名的内容。
我们在使用中需要创建一个JWT工具类,用来对登陆用户进行加密,通过token的解密来进行认证。
public class JwtUtils { public static final String SUBJECT = "test"; public static final long EXPIRE = 1000*60*60*24*7; //过期时间,毫秒,一周 //秘钥,可写在配置文件中 public static final String APPSECRET = "test14631462"; /** * 生成jwt * @param user * @return */ public static String geneJsonWebToken(User user){ if(user == null || user.getId() == null || user.getName() == null){ return null; } //根据业务需求确定claims中所放数据,如不必要:密码尽量不要放在jwt中传输 String token = Jwts.builder().setSubject(SUBJECT) .claim("id",user.getId()) .claim("name",user.getName()) .claim("img",user.getHeadImg()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis()+EXPIRE)) .signWith(SignatureAlgorithm.HS256,APPSECRET).compact(); return token; } /** * 校验token * @param token * @return */ public static Claims checkJWT(String token ){ try{ final Claims claims = Jwts.parser().setSigningKey(APPSECRET). parseClaimsJws(token).getBody(); return claims; }catch (Exception e){ } return null; } }
浙公网安备 33010602011771号