【权限设计系列】「认证授权专题」微服务中的JWT协议以及全方面概念介绍指南

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【权限设计系列】「认证授权专题」微服务中的JWT协议以及全方面概念介绍指南

JWT 介绍说明


JSON Web Token(JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519)。


来自JWT RFC 7519标准化的摘要说明:JSON Web Token是一种紧凑的,URL 安全的方式,表示要在双方之间传输的声明。




JWT 用途形式


JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该 Token 也可直接被用于认证,也可被加密。




JWT 认证流程


客户端处理方式


  1. 客户端不需要持有密钥,由服务端通过密钥生成Token。


  1. 客户端登录时通过账号和密码到服务端进行认证,认证通过后,服务端通过持有的密钥生成Token,Token中一般包含失效时长和用户唯一标识,如用户ID,服务端返回Token给客户端。


  1. 客户端保存服务端返回的Token。


  1. 客户端进行业务请求时在Head的Authorization字段里面放置Token,如: Authorization: Bearer Token



服务端处理方式


  1. 服务端对请求的Token进行校验,并通过Redis查找Token是否存在,主要是为了解决用户注销,但Token还在时效内的问题,如果Token在Redis中存在,则说明用户已注销;如果Token不存在,则校验通过。


  1. 服务端可以通过从Token取得的用户唯一标识进行相关权限的校验,并把此用户标识赋予到请求参数中,业务可通过此用户标识进行业务处理。
  2. 用户注销时,服务端需要把还在时效内的Token保存到Redis中,并设置正确的失效时长。

image.png



JWT 结构


JWT 是由三段信息构成的:


  • 第一段为头部(Header)
  • 第二段为载荷(Payload)
  • 第三段为签名(Signature)。



每部分内容都是一个JSON 对象,将每一段JSON对象采用BASE64编码,将编码后的内容用. 链接一起就构成了 JWT 字符串。如下:

header.payload.signature
复制代码



头部(Header)


头部用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个 JSON 对象。

{ "typ": "JWT", "alg": "HS256" }
复制代码


在头部指明了签名算法是 HS256 算法。



载荷(payload)


载荷就是存放有效信息的地方。有效信息包含三个部分:


标准中注册的声明、公共的声明、私有的声明


  • 标准中注册的声明(建议但不强制使用):
  • iss:JWT 签发者
  • sub:JWT 所面向的用户
  • aud:接收 JWT 的一方
  • exp:JWT 的过期时间,这个过期时间必须要大于签发时间
  • nbf:定义在什么时间之前,该 JWT 都是不可用的
  • iat:JWT 的签发时间
  • jti:JWT 的唯一身份标识,主要用来作为一次性 token, 从而回避重放攻击。


  • 公共的声明 :公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息. 但不建议添加敏感信息,因为该部分在客户端可解密。


  • 私有的声明 :私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为 base64 是对称解密的,意味着该部分信息可以归类为明文信息。



示例如下:
{ "iss": "Online JWT Builder", "iat": 1416797419, "exp": 1448333419, "aud": "www.primeton.com", }
复制代码



签名(signature)


创建签名需要使用 Base64 编码后的 header 和 payload 以及一个秘钥。将 base64 加密后的 header 和 base64 加密后的 payload 使用. 连接组成的字符串,通过 header 中声明的加密方式进行加盐 secret 组合加密,然后就构成了 jwt 的第三部分。


比如:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)



相关文章
|
10天前
|
安全 Java Spring
Spring Security+jwt实现认证
Spring Security+jwt实现认证
|
10天前
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
60 1
|
10天前
|
存储 关系型数据库 MySQL
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
142 0
|
10天前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
1天搞定SpringBoot+Vue全栈开发 (9)JWT跨域认证
1天搞定SpringBoot+Vue全栈开发 (9)JWT跨域认证
|
10天前
|
JSON SpringCloudAlibaba Cloud Native
SpringCloudAlibaba:4.3云原生网关higress的JWT 认证
SpringCloudAlibaba:4.3云原生网关higress的JWT 认证
19 1
|
10天前
|
JSON 安全 Java
微服务Token鉴权设计:概念与实战
【4月更文挑战第29天】在微服务架构中,鉴权是确保服务安全的重要环节。由于微服务往往由多个独立的服务组成,这些服务之间的通信需要一种高效、安全的鉴权机制。Token鉴权作为一种常用的鉴权方式,为微服务架构提供了简洁而有效的解决方案。
24 0
|
10天前
|
运维 Serverless API
Serverless 应用引擎产品使用之阿里函数计算中要关掉http触发器的jwt认证才可以进行性能探测如何解决
便宜云服务器Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
16 1
|
10天前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
10天前
|
敏捷开发 运维 监控
【专栏】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维
【4月更文挑战第27天】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维。本文探讨其基本概念、起源,核心优势(如敏捷开发、高可伸缩性)及挑战(系统复杂度、数据一致性),并分享实施策略(服务划分、技术选型、CI/CD)与实践案例(Netflix、Uber、Spotify),展示微服务如何重塑软件开发,并成为未来复杂应用系统的基础。


http://www.vxiaotou.com