JWT的学习

JWT

        JWT全称是JSON Web Token(JSON Web令牌),JWT是一个开放标准(RFC 7519),它提供了一种在各方之间安全地传输信息的方式。JWT特别适用于在网络中作为令牌(tokens)进行身份验证和信息交换。

JWT的组成部分

        JWT由三部分组成,分别用.(点)分隔:

        1.Header(头部):头部包含两部分信息,令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。
 

{  
  "alg": "HS256",  
  "typ": "JWT"  
}

        2.Payload(负载):负载是包含声明(claims)的部分。声明是关于实体(通常是用户)和其他数据的声明。声明有三种类型:注册的、公开的和私有的。注册的声明是JWT预定义的声明,如iss(发行人)、exp(过期时间)、sub(主题)等。公开的声明可以包含任何信息,但一般不建议包含敏感信息,因为这部分内容可以被解码并查看。私有的声明是提供者和消费者之间所定义的声明。

{  
  "sub": "1234567890",  
  "name": "sam",  
  "admin": true  
}

        3.Signature(签名):签名部分是对前两部分(头部和负载)的编码后的数据进行签名,以确保数据在传输过程中没有被篡改。如果使用的是HMAC算法,签名是通过将Base64Url编码后的头部和负载,用一个密钥进行HMAC SHA256运算,最后产生的签名也被Base64Url编码。如果使用的是RSA或ECDSA,签名是通过私钥对头部和负载的编码后的数据进行的。

JWT的工作原理

  1. 创建:当用户成功登录后,服务器会生成一个JWT,其中包含用户的身份和其他相关信息。这个JWT会被发送回客户端,用于后续的身份验证和授权。
  2. 传输:客户端在后续的请求中会将JWT包含在HTTP头部(通常是Authorization头部,使用Bearer模式)中发送给服务器。
  3. 验证:服务器在接收到请求后,会首先从HTTP头部中提取JWT,然后验证JWT的签名。如果签名验证成功,并且JWT没有过期,服务器就会信任JWT中的信息,并允许用户进行后续的操作。

JWT的优点

  1. 轻量级:JWT是基于JSON格式的,相比于传统的XML格式,它更加轻巧且易于解析。
  2. 自包含:JWT中包含了用户的一些声明信息,因此无需查询数据库来验证用户身份,有效降低了服务器的负担。
  3. 无状态性:JWT本身是无状态的,所有的信息都被包含在令牌中,服务器端无需保存任何状态信息,使得系统易于扩展和维护。
  4. 安全性:JWT中使用签名进行验证,防止数据被篡改,确保了数据的完整性和安全性。

JWT的注意事项

  1. 不要将敏感信息放在负载中:虽然JWT的负载部分可以包含任何信息,但最好不要包含敏感信息,如密码或密钥。因为这些信息可以被解码并查看。
  2. 设置合理的过期时间:JWT可以设置过期时间,以防止令牌被滥用。但是,过短的过期时间可能会导致用户体验不佳,而过长的过期时间可能会增加安全风险。
  3. 使用HTTPS:JWT在传输过程中应该使用HTTPS来确保数据的安全性。否则,JWT可能会被截获并被恶意利用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值