JWT令牌实现跨域身份验证

JWT令牌实现跨域身份验证

JWT介绍

JSON Web Token(JWT)是目前最流行的基于token的跨域身份验证解决方案。
在JWT极高的安全特性下保证了token的不可伪造和不可篡改,从而可实现易扩展、轻存储、高安全的无状态、分布式的Web应用授权。
本质上JWT是一个独立的身份验证令牌,可以包含用户标识、用户角色和权限等信息,以及可以存储任何其他信息(自包含)。任何人都可以轻松读取和解析,并使用密钥来验证真实性。
JWT的特点:

  1. 存储性能
  2. JWT将用户的状态分散到了客户端中保存,可以远远减少服务端的压力。相比较于通过Session方式实现身份验证有许多弊端:Session是存储在服务器端的,所以需要占用大量服务器内存,对于较大型应用而言可能还要保存许多的状态,一般还需借助nosql和缓存机制来实现session的存储,如果是分布式应用还需session共享。
  3. .兼容性
    支持移动设备,支持跨程序调用,Cookie 是不允许垮域访问的,而 Token 则不存在这个问题。
  4. 单点登录
    JWT能轻松的实现单点登录,因为用户的状态已经被传送到了客户端。token 可保存自定义信息,如:用户基本信息,web服务器用key去解析token,就获取到请求用户的信息了。我们也可以配置它以便包含用户拥有的任何权限。这意味着每个服务不需要与授权服务交互才能授权用户。
  5. 可拓展性
    因为JWT的信息是保存在客户端的,在分布式系统中JWT不存在进行用户身份验证时的Session共享问题,只要拿到用户的信息对其进行JWT方式的验证就可以判断他的身份合法性,那么就很方便进行服务端的扩展。
  6. 安全性
    因为JWT会通过数字签名实现身份验证的校验,所以他可以防止数据信息被篡改,达到很高的安全性。

JWT结构

JWT包含三个由点分隔的部分,它们分别是:

Header(头部)
Header通常由两部分组成:令牌的类型,即JWT。和用于签名加密的算法名称,如HMAC SHA256或RSA。Header部分的JSON被Base64Url编码,形成JWT的第一部分

{
“alg”: “HS256”,
“typ”: “JWT”
}

Payload(载荷)
Payload中放传输的信息,用户信息等用于传输的信息。Playload部分的JSON被Base64Url编码,形成JWT的第二部分。

{
“iss”: “发送人”,
“sub”: 主题”,
“aud”: “接受人”,
“exp”:”过期时间”,
“iat”:”签发时间”
“id”:”用户id”,
“name”:”用户姓名”
}

Signature(签名)
Signature用来验证发送请求者身份,由前两部分加密形成。要创建签名部分,您必须采用编码标头,编码有效载荷,秘钥,标头中指定的算法并签名。Signature部分的JSON被Base64Url编码,形成JWT的第三部分。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

其中secret时加密用的密钥

最后:将三者经过Base64Url编码后的内容通过点分隔后合成一个字符串放入token,并将token放入cookies中传给前端保存,服务器只要保存统一的密钥用于解密就可以。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值