JWT是什么?

JWT是什么?初见JWT,不知所云,赶紧Google(百度)一下,原来是跨域身份验证解决方案。 JWT只是缩写,全拼则是 JSON Web Tokens ,是目前流行的跨域认证解决方案,一种基于JSON的、用于在网络上声明某种主张的令牌(token)。 JWT 原理 jwt验证方式是将用户信息

JWT是什么?

 

初见JWT,不知所云,赶紧Google(百度)一下,原来是跨域身份验证解决方案。

JWT只是缩写,全拼则是 JSON Web Tokens ,是目前流行的跨域认证解决方案,一种基于JSON的、用于在网络上声明某种主张的令牌(token)。

JWT 原理

jwt验证方式是将用户信息通过加密生成token,每次请求服务端只需要使用保存的密钥验证token的正确性,不用再保存任何session数据了,进而服务端变得无状态,容易实现拓展。

加密前的用户信息,如:

{
    "username": "vist", "role": "admin", "expire": "2018-12-08 20:20:20" }

客户端收到的token:

7cd357af816b907f2cc9acbe9c3b4625

JWT 结构

一个token分为3部分:

  • 头部(header)
  • 载荷(payload)
  • 签名(signature)

3个部分用“.”分隔,如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

头部

JWT的头部分是一个JSON对象,描述元数据,通常是:

{
  "typ": "JWT", "alg": "HS256" }
  • typ 为声明类型,指定 “JWT”
  • alg 为加密的算法,默认是 “HS256”

也可以是下列中的算法:

JWS 算法名称 描述
HS256 HMAC256 HMAC with SHA-256
HS384 HMAC384 HMAC with SHA-384
HS512 HMAC512 HMAC with SHA-512
RS256 RSA256 RSASSA-PKCS1-v1_5 with SHA-256
RS384 RSA384 RSASSA-PKCS1-v1_5 with SHA-384
RS512 RSA512 RSASSA-PKCS1-v1_5 with SHA-512
ES256 ECDSA256 ECDSA with curve P-256 and SHA-256
ES384 ECDSA384 ECDSA with curve P-384 and SHA-384
ES512 ECDSA512 ECDSA with curve P-521 and SHA-512

载荷

载荷(payload)是数据的载体,用来存放实际需要传递的数据信息,也是一个JSON对象。
JWT官方推荐字段:

  • iss: jwt签发者
  • sub: jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf: 定义在什么时间之前,该jwt都是不可用的.
  • iat: jwt的签发时间
  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

也可以使用自定义字段,如:

{
    "username": "vist", "role": "admin" }

签名

签名部分是对前两部分(头部,载荷)的签名,防止数据篡改。

按下列步骤生成:
1、先指定密钥(secret)
2、把头部(header)和载荷(payload)信息分别base64转换
3、使用头部(header)指定的算法加密
最终,签名(signature) = HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload),secret)

客户端得到的签名:

header.payload.signature

也可以对JWT进行再加密。

JWT 使用

1、服务端根据用户登录状态,将用户信息加密到token中,返给客户端
2、客户端收到服务端返回的token,存储在cookie中
3、客户端和服务端每次通信都带上token,可以放在http请求头信息中,如:Authorization字段里面
4、服务端解密token,验证内容,完成相应逻辑

JWT 特点

  • JWT更加简洁,更适合在HTML和HTTP环境中传递
  • JWT适合一次性验证,如:激活邮件
  • JWT适合无状态认证
  • JWT适合服务端CDN分发内容
  • 相对于数据库Session查询更加省时
  • JWT默认不加密
  • 使用期间不可取消令牌或更改令牌的权限
  • JWT建议使用HTTPS协议来传输代码

今天的文章JWT是什么?分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/52196.html

(0)
编程小号编程小号
上一篇 2023-08-24 23:30
下一篇 2023-08-25

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注