JWT原理 使用(入门篇)

一、JWT简介

JWT:Json Web Token,是基于Json的一个公开规范,这个规范容许咱们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换
使用起来就是,由服务端根据规范生成一个令牌(token),而且发放给客户端。此时客户端请求服务端的时候就能够携带者令牌,以令牌来证实本身的身份信息。
做用:相似session保持登陆状态 的办法,经过token来表明用户身份。
 

2,JWT生成

 

3,JWT校验

 

4,一些问题

a、token到底生成什么样最好?(规则),每一个用户要 惟一
b、token返回给客户端以后,服务端还要 保存吗?
c、校验token时,怎么保证数据并无被黑客拦截并篡改?( 安全
d、token颁发给客户端以后,要不要有 过时时间
e、 屡次登陆生成的token都是同样的吗?都是可用的吗?
 

5,JWT规则详解

一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名 header.payload.signature
一个正常的token为: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjYyNywiZXhwIjoxNTcwMDE0ODg1fQ.vPbQh4syxNCzkKXKPSM93LzzLqoJdzPDNeKz8tz9cFM4NzhIOdPrJcH2DG-9-9MCUufCgrAhhGjuo85GKV4bOQ
 
 

 

6,JWT令牌的优势:

a、jwt基于json,很是方便解析
b、能够再令牌中自定义丰富的内容,易扩展(payload能够扩展)
c、经过签名,让JWT防止被篡改,安全性高
d、资源服务使用JWT可不依赖认证服务便可完成受权
 
 

7,demo测试

 1 /**
 2 * JWT 测试controller  3 *  4 * @author wangmeng  5 * @date 2019/9/2  6 */
 7 @RestController  8 @RequestMapping(value = "/user", produces = { "application/json; charset=UTF-8" })  9 public class JWTController { 10  
11  
12     private static final String SECRET = "wangmengtest.@163.com"; 13  
14  
15     @RequestMapping("/login/{username}/{password}") 16     public Map login(@PathVariable String username, @PathVariable String password) { 17         Map result = new HashMap(); 18         if (username.equals("admin") && password.equals("123456")) { 19             String jwt = Jwts.builder(). 20  setSubject(username). 21  signWith(SignatureAlgorithm.HS512, SECRET). 22  compact(); 23             result.put("token", jwt); 24         } else { 25             result.put("message", "帐号密码错误"); 26  } 27  
28  
29         return result; 30  } 31  
32  
33     @RequestMapping("/goods/{token}") 34     public Map verifyToken(@PathVariable String token) { 35         Map result = new HashMap(); 36         Jws<Claims> claimsJws = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token); 37         result.put("username", claimsJws.getBody().getSubject()); 38         return result; 39  } 40 }

 

 

请求测试:

一、生成token
 
二、使用token请求,获取username
 
 

八、问题解答

a、token到底生成什么样最好?(规则),每一个用户要惟一
三部分组成:头部、载荷与签名 header.payload.signature
 
b、token返回给客户端以后,服务端还要保存吗?
服务端不须要保存
 
c、校验token时,怎么保证数据并无被黑客拦截并篡改?(安全)
signature中有私钥来进行签名,能够保证安全性
 
d、token颁发给客户端以后,要不要有过时时间?
须要设置token过时时间
 
e、屡次登陆生成的token都是同样的吗?都是可用的吗?
能够再payload加上时间戳,来保证每次生成的token都不同,都是可用的
 

 后记

JWT还有不少内容须要挖掘,这里只是入门篇,后面有时间还会看看JWT源码 以及一些常见的坑。

原文出处:https://www.cnblogs.com/wang-meng/p/11452620.htmlhtml

相关文章
相关标签/搜索