JWT JSON Web Token 令牌 技术 在 微服务 中 鉴权功能的使用

JWT是一种规范,本身也是一个字符串,作用就是加密,不便于理解,

程序可以解读其信息,往往作为令牌使用,;

JWT 是 JSON Web Token 的缩写, 翻译是 JSON 网络 令牌 的意思;

 

JWT 字符串 由  3个 部分组成

 

头部:

是一个json字符串 描叙一下 基本信息:例如说明 类型 算法 等

比如说这个 json 字符串 

{"typ":"JWT","alg":"HS256"}

在头部指明了签名算法是HS256算法。 我们进行BASE64编码http://base64.xpcha.com/,编码后的字符串如下:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

就是 

{"typ":"JWT","alg":"HS256"}   变变变 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

 

载荷:

载荷就是 JWT 放 信息的地方,好像是 货车 的 车厢
格式同 头部
例如
{"sub":"1234567890","name":"John Doe","admin":true}
=>
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

 

签证:

文章煞尾 的作用 + 字符串 加盐加密 的作用

最后这里 是一个 存储的字符串,类似这样

TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

签证这里 最重要的是 一个 字符串,  再解析整个JWT字符串的时候需要用到,你不知道 签证字符串 是什么 ,就无法 解析整个 JWT 字符串

 

整个

JWT字符串 类似是这个样子 包含了如上3部分信息  

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

 

/******************************************************************************************************************************************/

 

JWT作为

令牌使用的时候 往往 通过是 后台 添加头 信息 发给客户端,也可以做成cookie 发给客户端;

 

/*****************************************************************************************************************************************/

 

Apache开源的JJWT

操作 JWT

1.0生成 JWT

2.0解析JWT

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

首先需要如下依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
</dependency>

然后
可用这个类生成 JWT
JwtBuilder builder= Jwts.builder()
    .setId("888")   //设置唯一编号
    .setSubject("某JSON")//设置主题  可以是JSON数据
    .setIssuedAt(new Date())//设置签发日期
    .signWith(SignatureAlgorithm.HS256,"biyou");//设置签名 使用HS256算法,并设置SecretKey(字符串),这个"biyou"是关键,后面解析要用这个
//构建 并返回一个JWT字符串 
System.out.println( builder.compact() );

>>>>>>>>>>>>>>>>>
然后你要拿 这个 JWT 字符串做什么都行

解析JWT字符串,可以理解是(货车卸货)
String compactJwt="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiLlsI_nmb0iLCJpYXQiOjE1NTc5MDQxODF9.ThecMfgYjtoys3JX7dpx3hu6pUm0piZ0tXXreFU_u3Y";
?
Claims claims = Jwts.parser().setSigningKey("biyou").parseClaimsJws(compactJwt).getBody();
//卸货
System.out.println(claims);

/*************************************************************************************/
以上是JJWT 的基本操作, JJWT 也可以给 生成的 JWT 字符串 设置 过期时间,
如果是已过期的 JWT 字符串,JJWT 在解析的时候,会抱一个
ExpiredJwtException的异常,用try-catch !!专门!!抓一下这个异常
就知道 这个 这个 JWT 过期了,

JJWT设置过期时间如下
long currentTimeMillis = System.currentTimeMillis();

Date date = new Date(currentTimeMillis+10086L);

JwtBuilder builder= Jwts.builder()

    .setId("888")   //设置唯一编号

    .setSubject("某JSON")//设置主题  可以是JSON数据

    .setIssuedAt(new Date())//设置签发日期

    .setExpiration(date)//设置过期时间

    .signWith(SignatureAlgorithm.HS256,"biyou");//设置签名 使用HS256算法,并设置SecretKey(字符串)

//构建 并返回一个字符串

System.out.println( builder.compact() );

JJWT解析
String compactJwt="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiLlsI_nmb0iLCJpYXQiOjE1NTc5MDUzMDgsImV4cCI6MTU1NzkwNTMwOH0.4q5AaTyBRf8SB9B3Tl-I53PrILGyicJC3fgR3gWbvUI";
?
Claims claims = Jwts.parser().setSigningKey("biyou").parseClaimsJws(compactJwt).getBody();
?
System.out.println(claims);
>>>>>>>>>>>>>>>>>>>>
如果设置了过期时间 解析 需要 try-catch 一下 专门 抓 过期异常
ExpiredJwtException ;


 



 

JWT JSON Web Token 令牌 技术 在 微服务 中 鉴权功能的使用

上一篇:jquery判断,元素是否具有某个class


下一篇:php+curl解决爬虫绝对路径及相对路径的问题。