JAVA WEB TOKEN的使用

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

Session与JWT的区别:

  • session是存放于服务端的,而jwt是存放于客户端的

JWT的组成

eyJhbGciOiJIUzUxMiJ9.//头部(Header)
eyJyYW5kb21LZXkiOiJucTdnc2xjMWxyIiwic3ViIjoieHV5aCIsInVzZXJOYW1lIjoieHV5aCIsImV4cCI6MTU4NzI4MDg0MiwidXNlcklkIjoiM2QwMjBiMDBlZmUyNDM1OWJjZTk0ZDUwZWE1NTkxNDUiLCJpYXQiOjE1ODQ2ODg4NDJ9.//载荷(Payload)
yeMfW-oEqlw31LqnYIbPkSrZXGLt0z6pB3RW0mp2JSSySOqnVn_ffWEunFPxhqu44PshHr9w_tqN3K9KtQ4V_w//签名(signature)
  1. 头部(Header)
    用于存储JWT的基本信息,类型type与签名算法;
{
  'typ': 'JWT',
  'alg': 'HS256'
}
  1. 载荷(Payload)
    用于存放有效信息(不敏感信息,base64可对称解密)的地方,比如用户名,用户ID,电话等信息,后端可从中拿取;
    DecodedJWT verifier = JWT.decode(token);
    Claim mobile = verifier.getClaim(“username”);
{
    "iss": "zhangsan",	//JWT发行者
    "iat": 1441593502,	//JWT发布时间
    "exp": 1441594722,	//token失效时间
    "aud": "www.test.com",	//接收JWT的一方
    "sub": "zzz@tet.com",	//该JWT所面向的用户
}
  1. 签名(signature)
    签证信息,由base64解密后的Header与Payload,再由Header中的签名算法加上后端的secret在后端生成的签证;
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
var signature = HMACSHA256(encodedString, 'secret'); //secret是存放于后端的,自定义

使用

第一次用户登录成功之后,生成token,存放于后端,并返回给用户,用户以后每次请求的时候都带着token

优缺点

  • 优点
    1、通用性,可跨语言;
    2、无状态,jwt不在服务端存储任何状态,可在载荷Payload中存放一些业务逻辑所需要的信息,降低查询数据库的次数;
    3、可扩展性好,分布式部署情况下,session需要多机共享数据,存放redis或数据库中,而jwt不需要
  • 缺点
    1、安全性,payload不能存放敏感信息,因为base64加密的,可解密。
    2、
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值