云原生社区 > 微服务 > 正文

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

简介: 【权限设计系列】「认证授权专题」微服务中的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)



版权声明:本文内容由便宜云服务器实名注册用户自发贡献,版权归原作者所有,便宜云服务器开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《便宜云服务器开发者社区用户服务协议》和《便宜云服务器开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
带你一文使用NodeJS、JWT、Vue搞定基于角色的授权
在本教程中,我们将完成一个关于如何在 Node.js 中 使用 JavaScript ,并结合 JWT 认证,实现基于角色(role based)授权/访问的简单例子。
41 0
SpringCloud整合 Oauth2+Gateway+Jwt+Nacos 实现授权码模式的服务认证(二)
SpringCloud整合 Oauth2+Gateway+Jwt+Nacos 实现授权码模式的服务认证(二)
323 0
SpringCloud整合 Oauth2+Gateway+Jwt+Nacos 实现授权码模式的服务认证(一)
SpringCloud整合 Oauth2+Gateway+Jwt+Nacos 实现授权码模式的服务认证(一)
386 0
【SpringBoot技术指南】「权限校验专区」Shiro整合JWT授权和认证实现
【SpringBoot技术指南】「权限校验专区」Shiro整合JWT授权和认证实现
124 0
【SpringBoot技术专题】「JWT技术专区」SpringSecurity整合JWT授权和认证实现
【SpringBoot技术专题】「JWT技术专区」SpringSecurity整合JWT授权和认证实现
74 0
Spring Security OAuth2基于JWT认证授权
OAuth2是一种授权方法,用于通过HTTP协议提供对受保护资源的访问。首先,OAuth2使第三方应用程序能够获得对HTTP服务的有限访问权限,然后通过资源所有者和HTTP服务之间的批准交互来让第三方应用程序代表资源所有者获取访问权限。
76 0
微服务系列之授权认证(三) JWT
官方定义:JWT是JSON Web Token的缩写,JSON Web Token是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,可以将各方之间的信息作为JSON对象安全地传输。该信息可以被验证和信任,因为它是经过加密的。
177 0
EMQ
EMQX Cloud 更新:新增 Redis 和 JWT 外部认证授权
近日 EMQX Cloud 开放了 Redis 和 JWT 两种外部认证授权方式。用户可以在进行认证鉴权时将有更多的选择,灵活实现更安全、快速的海量设备接入。
135 0
SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权
OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该token(令牌)在限定时间、限定范围访问指定资源。 ??OAuth2中使用token验证用户登录合法性,但token最大的问题是不携带用户信息,资源服务器无法在本地进行验证,每次对于资源的访问,资源服务器都需要向认证服务器发起请求,一是验证token的有效性,二是获取token对应的用户信息。如果有大量的此类请求,无疑处理效率是很低,且认证服务器会变成一个中心节点
801 0
ASP.NET Core 3.0一个jwt的轻量角色/用户、单个API控制的授权认证库
ASP.NET Core 3.0一个jwt的轻量角色/用户、单个API控制的授权认证库
103 0
微服务
+关注
为微服务建设降本增效,为微服务落地保驾护航。
+关注
洛神灬殇
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
文章
问答
视频
相关电子书
更多
微服务在小米消息推送的实践和感悟
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载


http://www.vxiaotou.com