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