2.9 KiB
2.9 KiB
系统交互图与设计说明
1. 交互时序图
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中体现其多系统能力。
如需扩展更多业务场景或权限模型,可在此架构基础上灵活调整。