JWT(JSON web token)的三个组成部分,使用 jwt 鉴权机制

作者 : admin 本文共1413个字,预计阅读时间需要4分钟 发布时间: 2024-06-9 共3人阅读

JWT(JSON web token)的三个组成部分

JWT(JSON Web Token)是一种用于在网络应用间安全传输信息的开放标准(RFC 7519)。它由三个部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)

  1. 头部(Header): JWT的头部通常由两部分组成:令牌的类型(即JWT)和使用的签名算法。例如,一个简单的头部可以是: { “alg”: “HS256”, “typ”: “JWT” } 该头部的意思是使用HS256算法进行签名,并且类型是JWT。

  2. 载荷(Payload): 载荷是JWT的第二个部分,也被称为声明(Claims)。它包含了一些被称为声明的实体(例如用户、用户角色等)的信息。载荷可以包含一组标准声明,例如: { “sub”: “1234567890”, “name”: “John Doe”, “iat”: 1516239022 } 还可以包含自定义的声明,例如: { “role”: “admin” }

  3. 签名(Signature): 要创建JWT的签名部分,需要使用头部和载荷以及密钥进行签名。签名用于验证消息的完整性和验证发件人的身份。例如,用于创建签名的算法可以是HMAC SHA256(使用字符串和密钥并加密生成签名),或者是RSA或ECDSA(使用公钥加密和私钥解密)等。服务端需要保存加密用的密钥,以便后续的签名验证

总结起来,JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部用于描述签名的算法和类型,载荷用于存储信息的声明,签名用于验证消息的完整性和验证发件人的身份。

JWT和cookie都可以用于身份验证和会话管理,但它们在安全性方面有一些不同。

1. 盗用风险:JWT的盗用风险相对较高。由于JWT是无状态的,服务器不存储任何会话信息,而是将所有必要的信息存储在令牌中,因此一旦JWT被盗用,攻击者可以使用该令牌来访问被授权的资源。而cookie的盗用风险相对较低,特别是当它与HTTP-only标志一起使用时,可以防止JavaScript访问cookie,从而降低了盗用风险。

2. 防止盗用的方法:  

        – 对于JWT:使用HTTPS协议进行传输以保证通信的安全性,确保令牌不被拦截和篡改;设置JWT的过期时间,及时使其失效;在服务器端对JWT进行验证,确保它是有效且未被修改的。           – 对于cookie:使用HTTP-only标志将cookie设置为仅通过HTTP协议传输,防止JavaScript访问cookie;设置cookie的Secure标志,只在使用加密连接时发送cookie;对cookie进行签名或加密,以保证其完整性和安全性。无论是使用JWT还是cookie,都需要合理设置过期时间,并定期更换密钥或令牌,以降低盗用风险。另外,用户在使用网站或应用时也应保持警惕,避免在不可信任的环境下使用敏感信息。

优点

  1. json 格式传递数据,跨语言
  2. 字节占用小,组成简单
  3. 状态无关,服务端无需保存会话信息
  4. 可以在分布式系统中,解决单点登录的问题
  5. 可以防护 csrf 攻击
  6. payload 可以扩展信息

缺点

  1.  payload 不能存放敏感信息
  2. 安全性依赖签名算法,签名的密钥需要保存好
  3. 为了避免 token 被劫持,使用https协议
  4. 不支持在令牌生命周期内动态改变权限
  5. 无法撤销,在有效期内无法取消或删除
  6. 荷载payload大小限制
  7. 每次请求都要携带,会增加网络负担

本站无任何商业行为
个人在线分享 » JWT(JSON web token)的三个组成部分,使用 jwt 鉴权机制
E-->