文章插图
【微服务架构下的鉴权,怎么做更优雅?】
3. 签名(signature)创建签名需要使用 Base64 编码后的 header 和 payload 以及一个秘钥 。将 base64 加密后的 header 和 base64 加密后的 payload 使用 。连接组成的字符串,通过 header 中声明的加密方式进行加盐 secret 组合加密,然后就构成了 jwt 的第三部分 。
比如:
HmacSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT 的优点:- 跨语言,JSON 的格式保证了跨语言的支撑
- 基于 Token,无状态
- 占用字节小,便于传输
- Token 存储在 Cookie 中,这样客户端注销时,自然可以清空掉
- 注销时,将 Token 存放到分布式缓存中,每次校验 Token 时区检查下该 Token 是否已注销 。不过这样也就失去了快速校验 Token 的优点 。
- 多采用短期令牌,比如令牌有效期是 20 分钟,这样可以一定程度上降低注销后 Token 可用性的风险 。
OAuth 是一种开放的协议,为桌面程序或者基于 BS 的 web 应用提供了一种简单的,标准的方式去访问需要用户授权的 API 服务 。OAUTH 认证授权具有以下特点:
- 简单:不管是 OAuth 服务提供者还是应用开发者,都很容易于理解与使用;
- 安全:没有涉及到用户密钥等信息,更安全更灵活;
- 开放:任何服务提供商都可以实现 OAuth,任何软件开发商都可以使用 OAuth;
OAuth 2.0 关注客户端开发者的简易性 。要么通过组织在资源拥有者和 HTTP 服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限 。同时为 Web 应用,桌面应用和手机,和起居室设备提供专门的认证流程 。
2012 年 10 月,OAuth 2.0 协议正式发布为 RFC 6749 。
授权流程OAuth 2.0 的流程如下:
文章插图
- (A)用户打开客户端以后,客户端要求用户给予授权 。
- (B)用户同意给予客户端授权 。
- (C)客户端使用上一步获得的授权,向认证服务器申请令牌 。
- (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌 。
- (E)客户端使用令牌,向资源服务器申请获取资源 。
- (F)资源服务器确认令牌无误,同意向客户端开放资源 。
- 客户端:客户端是代表资源所有者对资源服务器发出访问受保护资源请求的应用程序 。
- 资源拥有者:资源拥有者是对资源具有授权能力的人 。
- 资源服务器:资源所在的服务器 。
- 授权服务器:为客户端应用程序提供不同的 Token,可以和资源服务器在统一服务器上,也可以独立出去 。
1. 授权码模式(authorization code)授权码模式(authorization code)是功能最完整、流程最严密的授权模式 。它的特点就是通过客户端的后台服务器,与 "服务提供商" 的认证服务器进行互动 。流程如下:
- 用户访问客户端,后者将前者导向认证服务器 。
- 用户选择是否给予客户端授权 。
- 假设用户给予授权,认证服务器将用户导向客户端事先指定的 "重定向 URI"(redirection URI),同时附上一个授权码 。
- 客户端收到授权码,附上早先的 "重定向 URI",向认证服务器申请令牌 。这一步是在客户端的后台的服务器上完成的,对用户不可见 。
- 认证服务器核对了授权码和重定向 URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token) 。
推荐阅读
- 阿里架构师教你处理高并发:2种方法,解决Redis和Mysql一致性
- 上虞婚庆策划哪家服务好
- 潮安供电部门服务给力凤凰青麻园茶农制茶用电
- 七彩云南茶管家服务模式探析
- 大米轻微发霉怎么处理
- 来凤县农业服务中心助力大河茶农及时除虫
- 微信怎么运营?微信生态下运营怎么做?
- PHP服务器Apache与Nginx的对比分析
- 微信公众号吸粉8大策略,实战运营指南
- 个人服务器基础设施架构简介