JWT/JJWT JSON WEB TOKEN介绍和使用
2017-11-14 10:31
609 查看
JSON web Token,简称JWT,本质是一个token,是一种紧凑的URL安全方法(注意是方法,博主刚开始接触一直以为是一种像shiro一样的),用于在网络通信的双方之间传递。一般放在HTTP的headers 参数里面的authorization里面(这个是可以自己定义放在哪里的,毕竟只是一种验证用户的方式),值的前面加Bearer关键字和空格。除此之外,也可以在url和request body中传递。
JWT包含三个部分,分别是头部、载荷与签名。其中头部包含的是加密的一些信息,签名是根据前面两部分生成的。最主要的就是咱们存放信息的载荷部分了。
具体介绍可以参考:http://blog.leapoahead.com/2015/09/06/understanding-jwt/
这里就不再赘述,这篇文章主要说jjwt的使用,也就是java版本的jwt包的使用
maven:
当然,项目中没有maven的同学也可以去maven仓库里下载jjwt的jar包引入项目
2
3
4
5
快速开始:
构造jwt串
2
3
4
5
6
7
8
9
10
11
12
13
14
大概会是这样:
解析jwt串:
其中parseClaimsJws验证jwt字符串失败可能会抛出异常,这时咱们应该捕获这个异常:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ok,如果还有不明白的地方可以参考jjwt在github上的readme:https://github.com/jwtk/jjwt
JWT包含三个部分,分别是头部、载荷与签名。其中头部包含的是加密的一些信息,签名是根据前面两部分生成的。最主要的就是咱们存放信息的载荷部分了。
具体介绍可以参考:http://blog.leapoahead.com/2015/09/06/understanding-jwt/
这里就不再赘述,这篇文章主要说jjwt的使用,也就是java版本的jwt包的使用
maven:
当然,项目中没有maven的同学也可以去maven仓库里下载jjwt的jar包引入项目
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> </dependency>1
2
3
4
5
快速开始:
构造jwt串
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.impl.crypto.MacProvider; import java.security.Key; // We need a signing key, so we'll create one just for this example. Usually // the key would be read from your application configuration instead. Key key = MacProvider.generateKey();//这里是加密解密的key。 String compactJws = Jwts.builder()//返回的字符串便是我们的jwt串了 .setSubject("Joe")//设置主题 .signWith(SignatureAlgorithm.HS512, key)//设置算法(必须) .compact();//这个是全部设置完成后拼成jwt串的方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
大概会是这样:
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJKb2UifQ.yiV1GWDrQyCeoOswYTf_xvlgsnaVVYJM0mU6rkmRBf2T1MBl3Xh2kZii0Q9BdX5-G0j25Qv2WF4lA6jPl5GKuA1
解析jwt串:
Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws).getBody().getSubject(); // 获取jwt串里的subject参数,获取body以后可以获取到你存入的信息1
其中parseClaimsJws验证jwt字符串失败可能会抛出异常,这时咱们应该捕获这个异常:
try { Jws<Claims> parseClaimsJws = Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws);//compactJws为jwt字符串 Claims body = parseClaimsJws.getBody();//得到body后我们可以从body中获取我们需要的信息 //比如 获取主题,当然,这是我们在生成jwt字符串的时候就已经存进来的 String subject = body.getSubject(); //OK, we can trust this JWT } catch (SignatureException | MalformedJwtException e) { // TODO: handle exception // don't trust the JWT! // jwt 解析错误 } catch (ExpiredJwtException e) { // TODO: handle exception // jwt 已经过期,在设置jwt的时候如果设置了过期时间,这里会自动判断jwt是否已经过期,如果过期则会抛出这个异常,我们可以抓住这个异常并作相关处理。 }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ok,如果还有不明白的地方可以参考jjwt在github上的readme:https://github.com/jwtk/jjwt
相关文章推荐
- JWT/JJWT JSON WEB TOKEN介绍和使用
- JWT生成JsonWebToken登录令牌并使用自定义过滤器验证(包含跨域设置)
- 使用json web token(jwt)
- python使用json web token (jwt)实现http api的加密传输
- Spring Boot实战之Filter实现使用JWT进行接口认证 jwt(json web token) 用户发送按照约定,向服务端发送 Header、Payload 和 Signature,
- Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证
- 八幅漫画理解使用JSON Web Token(JWT)设计单点登录系统
- Go实战--golang中使用JWT(JSON Web Token)
- python使用json web token (jwt)实现http api的加密传输
- Go实战--golang中使用JWT(JSON Web Token)
- python使用json web token (jwt)实现http api的加密传输
- android 中使用jwt token(json web token)--java
- JSON Web Token - 在Web应用间安全地传递信息 JWT
- JSON Web Token(2)——使用JSON Web Token设计单点登录系统
- JSON Web Token (JWT) - 在Web应用间安全地传递信息
- 使用json web token
- spring安全验证之jwt(json web token)实践
- gitlab无法push或clone的错误:JWT::DecodeError (Nil JSON web token): lib/gitlab/workhorse.rb:120:in `verify_api_request!'
- JWT【JSON Web Token】 简述