基于JWT做用户登录验证 Spring boot2.0 + mybatis
说明
JWT的构成
下面是生成token的一段源代码
private String sign() throws SignatureGenerationException {
String header = Base64.encodeBase64URLSafeString(this.headerJson.getBytes(StandardCharsets.UTF_8));
String payload = Base64.encodeBase64URLSafeString(this.payloadJson.getBytes(StandardCharsets.UTF_8));
byte[] signatureBytes = this.algorithm.sign(header.getBytes(StandardCharsets.UTF_8), payload.getBytes(StandardCharsets.UTF_8));
String signature = Base64.encodeBase64URLSafeString(signatureBytes);
return String.format("%s.%s.%s", header, payload, signature);
}
从源码可以知道JWT由三个部分组成,header, payload, signature。构建token的大概过程如下:
1.对header进行base64url转码加密放在第一部分;header默认是传入以下json字符集:
{
typ: JWT,
alg: HS256, #加密算法id
kid:keyId, withKeyId
}
2.对payload进行base64url转码加密放在第二部分;payload json字符集中的默认key如下,可以调用JWTCreator.Builder的方法向字符集传值:
{
iss:Issuer,发行者 withIssuer
sub:Subject,主题 withSubject
aud:Audience, withAudience
exp:Expiration time,过期时间 withExpiresAt
nbf:Not before withNotBefore
iat:Issued at,发行时间 withIssuedAt
jti:JWT ID withJWTId
# 其他key value可以用withClaim方法传入
}
3.把一个secret 放进加密后的header.payload再进行加密放在第三部分,这个secret由服务器保存。