|
|
## 授权、鉴权中心微服务功能设计
|
|
|
- 什么是 JWT
|
|
|
- JSON Web Token (WT)是一个开放标准,它定义了一种紧凑的、自包含的方式,用于作为 JSON对象在各方之间安全地传输信息
|
|
|
- 哪些场景下可以考虑使用 JWT?
|
|
|
- 用户授权 信息交换
|
|
|
---
|
|
|
- JWT 的结构(组成部分)
|
|
|
- JWT由三个部分组成:Header、Payload、Signature,且用圆点连接 xxxxx.yyyyy.ZZZZZ
|
|
|
- Header:由两部分(Token 类型、加密算法名称)组成,并使用 Base64 编码 {'alg':"HS256",'type':"JWT"}
|
|
|
- Payload:KV 形式的数据,即你想传递的数据(授权的话就是 Token 信息 )
|
|
|
- Signature:为了得到签名部分,你必须有编码过的 Header、编码过的 payload、一个秘钥, 签名算法是 Header 中指定的那个,然对它们签名即可
|
|
|
- HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
|
|
|
---
|
|
|
- 授权、鉴权中心微服务功能逻辑架构
|
|
|
- ![授权鉴权中心微服务功能逻辑架构.png](pic/授权鉴权中心微服务功能逻辑架构.png)
|
|
|
- 鉴权功能不走HTTP可以更快来进行完成开发, 因为微服务很多模块都要依赖鉴权服务
|
|
|
---
|
|
|
## 搭建授权、鉴权中心微服务
|
|
|
- [FIX] Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
|
|
|
- 加入配置:
|
|
|
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
|
|
|
- [FIX] Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time
|
|
|
- 在配置文件中 spring.datasource.url 加 serverTimezone=GMT%2B8
|
|
|
## 数据表及 ORM 过程
|
|
|
-
|
|
|
## 生成 RSA256 公钥和私钥对
|
|
|
- [RSATest.java]
|
|
|
- 一般是放在服务器上, 用的时候拉取下来使用
|
|
|
## 基于 JWT + RSA256 的授权
|
|
|
- 查看代码实现即可
|
|
|
## 验证服务可用性
|
|
|
- Test 验证 Service 功能可用性
|
|
|
- http 脚本验证 对外接口是否可用
|
|
|
## 授权、鉴权中心微服务总结
|
|
|
|
|
|
- 对比基于 Token 与基于服务器的身份认证
|
|
|
- 最为传统的做法,客户端存储 Cookie(一般是 Sessionid),服务器存储 Session
|
|
|
- Session 是每次用户认证通过以后,服务器需要创建一条记录保存用户信息,通常是在内存中,随着认证通过的用户越来越多,服务器的在这里的开销就会越来越大
|
|
|
- 在不同域名之前切换时,请求可能会被禁止;即跨域问题
|
|
|
---
|
|
|
- 基于 Token(JWT)的身份认证
|
|
|
- JWT 与 Session的差异相同点是,它们都是存储用户信息;然而,Session是在服务器端的,而JWT是在客户端的
|
|
|
- JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力
|
|
|
---
|
|
|
- 对比基于 Token 与基于服务器的身份认证
|
|
|
- 两者优缺点的对比
|
|
|
- 解析方法: JWT 使用算法直接解析得到用户信息; Session 需要额外的数据映射实现匹配
|
|
|
- 管理方法: JWT只有过期时间的限制:Session 数据保存在服务器,可控性更强
|
|
|
- 跨平台: JWT就是一段字符串,可以任意传播;Session 跨平台需要有统一的解析平台,较为繁琐
|
|
|
- 时效性: JWT 一旦生成,独立存在,很难做特殊控制:Session 时效性完全由服务端的逻辑说了算
|
|
|
- Tips:各自都有优缺点, 都是登录, 授权的解决方案
|
|
|
---
|
|
|
- 生成数据库 文档
|
|
|
- [DBDocTest.java]
|
|
|
|
|
|
|
|
|
|
|
|
|