前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JWT原理 使用(入门篇)

JWT原理 使用(入门篇)

作者头像
一枝花算不算浪漫
发布2019-09-04 10:55:39
1.3K0
发布2019-09-04 10:55:39
举报
文章被收录于专栏:一枝花算不算浪漫的专栏
1、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测试
代码语言:javascript
复制
 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 }
请求测试:

1、生成token

2、使用token请求,获取username

8、问题解答

a、token到底生成什么样最好?(规则),每个用户要唯一

三部分组成:头部、载荷与签名 header.payload.signature

b、token返回给客户端之后,服务端还要保存吗?

服务端不需要保存

c、校验token时,怎么保证数据并没有被黑客拦截并篡改?(安全)

signature中有私钥来进行签名,可以保证安全性

d、token颁发给客户端之后,要不要有过期时间?

需要设置token过期时间

e、多次登录生成的token都是一样的吗?都是可用的吗?

可以再payload加上时间戳,来保证每次生成的token都不一样,都是可用的

 后记

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、JWT简介
  • 2,JWT生成
  • 3,JWT校验
  • 4,一些问题
  • 5,JWT规则详解
  • 6,JWT令牌的优点:
  • 7,demo测试
  • 请求测试:
  • 8、问题解答
  •  后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档