基于 Token 的身份验证方法
JWT 标准的 Token 有三个部分:
- header
- payload
- signature
中间用点分隔开,并且都会使用 Base64 编码
public String generateJwtToken(){
Date beginDate = new Date();
Timestamp endDate = new Timestamp(System.currentTimeMillis() + 3*60*1000);
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("typ", "JWT");
String octo = Jwts.builder().setHeader(map).setIssuer(OctoPrivilegeKey).setIssuedAt(beginDate).setExpiration(endDate).signWith(SignatureAlgorithm.HS256, OctoPrivilegeSecretBase64).compact();
return octo;
}
Header
header 部分主要是两部分内容,一个是 Token 的类型,另一个是使用的算法,比如下面类型就是 JWT,使用的算法是 HS256。
{ "typ": "JWT", "alg": "HS256" }
Payload
Payload 里面是 Token 的具体内容,这些内容里面有一些是标准字段,你也可以添加其它需要的内容。下面是标准字段:
- iss:Issuer,发行者
- sub:Subject,主题
- aud:Audience,观众
- exp:Expiration time,过期时间
- nbf:Not before
- iat:Issued at,发行时间
- jti:JWT ID
Signature
JWT 的最后一部分是 Signature ,这部分内容有三个部分,先是用 Base64 编码的 header.payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。
- header
- payload
- secret