74 lines
2.9 KiB
Markdown
74 lines
2.9 KiB
Markdown
|
|
# 系统交互图与设计说明
|
|||
|
|
|
|||
|
|
## 1. 交互时序图
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant 用户
|
|||
|
|
participant 前端A
|
|||
|
|
participant 前端B
|
|||
|
|
participant 网关
|
|||
|
|
participant OIDC
|
|||
|
|
participant 资源服务
|
|||
|
|
|
|||
|
|
用户->>前端A: 访问 a.local.com
|
|||
|
|
前端A->>用户: 检查本地token
|
|||
|
|
alt token无效或无token
|
|||
|
|
前端A->>OIDC: 跳转/oauth2/authorize (client_id=a-client)
|
|||
|
|
OIDC->>用户: 登录页/授权页
|
|||
|
|
用户->>OIDC: 输入账号、密码、租户
|
|||
|
|
OIDC->>前端A: 跳转回/callback?code=xxx
|
|||
|
|
前端A->>OIDC: 用code换token
|
|||
|
|
OIDC->>前端A: 返回access_token (含租户、clientId、用户名等)
|
|||
|
|
end
|
|||
|
|
前端A->>网关: 携带token访问API
|
|||
|
|
网关->>OIDC: 校验token
|
|||
|
|
网关->>资源服务: 转发请求
|
|||
|
|
资源服务->>网关: 返回数据
|
|||
|
|
网关->>前端A: 返回数据
|
|||
|
|
|
|||
|
|
用户->>前端B: 访问 b.local.com
|
|||
|
|
前端B->>用户: 检查本地token
|
|||
|
|
alt token无效或无token
|
|||
|
|
前端B->>OIDC: 跳转/oauth2/authorize (client_id=b-client)
|
|||
|
|
OIDC->>用户: 登录页/授权页
|
|||
|
|
用户->>OIDC: 输入账号、密码、租户
|
|||
|
|
OIDC->>前端B: 跳转回/callback?code=xxx
|
|||
|
|
前端B->>OIDC: 用code换token
|
|||
|
|
OIDC->>前端B: 返回access_token (含租户、clientId、用户名等)
|
|||
|
|
end
|
|||
|
|
前端B->>网关: 携带token访问API
|
|||
|
|
网关->>OIDC: 校验token
|
|||
|
|
网关->>资源服务: 转发请求
|
|||
|
|
资源服务->>网关: 返回数据
|
|||
|
|
网关->>前端B: 返回数据
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. 设计说明
|
|||
|
|
|
|||
|
|
### 多租户与多系统
|
|||
|
|
- 支持多租户(如tenant-a、tenant-b),每个租户可绑定多个client(如a-client、b-client)。
|
|||
|
|
- 用户登录时需输入租户信息,系统根据租户和client校验用户权限。
|
|||
|
|
|
|||
|
|
### OIDC认证与Token定制
|
|||
|
|
- OIDC服务端支持标准OAuth2/OIDC认证流程。
|
|||
|
|
- 登录成功后,生成的JWT token中包含用户名、clientId、租户代码等自定义字段。
|
|||
|
|
- 支持根据用户类型动态定制token有效期。
|
|||
|
|
|
|||
|
|
### 网关权限控制
|
|||
|
|
- 网关自动校验JWT token的合法性。
|
|||
|
|
- 网关通过解析token中的租户、clientId、用户类型等字段,实现细粒度的权限控制。
|
|||
|
|
- 可根据访问的host(如a.local.com、b.local.com)和token内容做多系统隔离和授权。
|
|||
|
|
|
|||
|
|
### 前后端交互
|
|||
|
|
- 前端负责本地token管理,token失效或无token时自动跳转OIDC认证。
|
|||
|
|
- 前端携带token访问网关API,网关校验并转发到后端资源服务。
|
|||
|
|
- 支持SSO和强制登录(通过prompt=login参数或后端策略控制)。
|
|||
|
|
|
|||
|
|
### 典型场景
|
|||
|
|
- 用户A登录a.local.com,获取a-client的token,只能访问A系统资源。
|
|||
|
|
- 用户B登录b.local.com,获取b-client的token,只能访问B系统资源。
|
|||
|
|
- 超级管理员可配置为多租户多client权限,token中体现其多系统能力。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
如需扩展更多业务场景或权限模型,可在此架构基础上灵活调整。
|