You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
3.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 授权、鉴权中心微服务功能设计
- 什么是 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]