基本介绍
AuthService为插件提供租户认证Token的签发、切换和管理能力。它是多租户认证流程的核心服务,处理从登录到租户选择、租户切换、以及平台管理员模拟进入租户的全链路Token管理。
插件通过services.Auth()获取该服务。典型消费方是linapro-tenant-core插件,它实现了租户选择和切换的业务逻辑,通过AuthService完成Token的签发和撤销。
设计思路
AuthService采用两阶段认证模型:
阶段一:登录产生PreToken。 用户通过用户名密码或其他方式完成身份验证后,主框架签发一个短生命周期的PreToken。此时用户尚未绑定到具体租户。
阶段二:选择租户签发TenantToken。 用户选择目标租户后,插件调用SelectTenant将PreToken消费并签发绑定到该租户的TenantToken。TenantToken包含AccessToken和RefreshToken,后续请求使用TenantToken访问租户资源。
租户切换。 已认证用户需要切换到其他租户时,插件调用SwitchTenant。该方法校验用户在目标租户的成员关系,撤销当前Token并签发新的TenantToken。
模拟令牌。 平台管理员可以模拟进入任意租户。IssueImpersonationToken签发一个标记为模拟的Token,RevokeImpersonationToken用于撤销模拟会话。模拟令牌的业务授权和审计检查由调用方插件负责,宿主只负责JWT签名、会话状态和权限缓存。
架构位置
AuthService在认证链路中处于Token管理层,位于身份验证和业务授权之间:
该服务与以下服务协作:
BizCtxService:AuthService签发的Token信息最终投影到BizCtx中,供业务逻辑读取SessionService:Token签发和撤销会同步更新在线会话状态TenantService:租户切换前需要校验用户在目标租户的可见性
主要能力
| 方法 | 说明 |
|---|---|
SelectTenant | 消费PreToken,签发绑定到目标租户的TenantToken |
SwitchTenant | 校验成员关系,撤销当前Token,签发新租户的TenantToken |
IssueImpersonationToken | 为平台管理员签发模拟令牌,进入目标租户 |
RevokeImpersonationToken | 撤销模拟令牌,结束模拟会话 |
设计约束
- 插件不直接签发JWT。
Token的签名、密钥管理和过期策略由宿主认证服务统一控制。插件通过AuthService申请签发,不接触签名细节。 - 模拟令牌需要调用方审计。
IssueImpersonationToken只负责签发Token,插件在调用前必须自行完成业务授权检查和审计记录。 PreToken是一次性的。SelectTenant消费PreToken后即失效,不能重复使用。- 租户切换会撤销旧
Token。SwitchTenant执行后,原Token立即失效,客户端需要使用新签发的Token。
相关服务
- BizCtxService -
Token信息投影到业务上下文 - SessionService -
Token签发和撤销同步会话状态 - TenantService - 租户切换前的可见性校验