现象
#1294 spec 把 authMode: 'sso:okta' 直接写在 portal 元数据里。但 IdP 配置(issuer / client_id / client_secret / cert)是租户级运行时数据,模板作者根本不知道客户用哪家 IdP。
复现
- 模板作者写 helpdesk 模板,要支持企业 SSO
- A 客户用 Okta,B 客户用 Azure AD,C 客户用 Auth0
- 当前 spec 要求模板里写死
authMode: 'sso:okta' — 模板就只能给 A 用
- B、C 客户要 fork 改元数据,违反「元数据驱动」的核心承诺
分阶段建议
M3:把元数据声明和运行时配置拆开。
元数据(模板可写):
authMode: 'sso', // 声明「需要 SSO」
supportedSsoProtocols?: ('saml'|'oidc'|'oauth2')[]; // 声明支持哪些协议
allowFallbackLogin?: 'magic-link' | 'password' | false; // SSO 失败时是否允许其它方式
运行时(租户管理员配置):
- 新对象
sys_identity_provider(已有?查 SOT):tenant + protocol + issuer + clientId + clientSecret
- 一个租户可绑定多个 IdP
- portal 登录页枚举本租户绑定的 IdP,渲染「Sign in with Okta / Sign in with Azure AD」
验收
- 同一份 helpdesk 模板,A 客户绑 Okta、B 客户绑 Azure AD,都能登录
- 模板代码 0 改动
- 租户管理员在 console 里配置 IdP(CRUD UI 由 sys_identity_provider 对象元数据自动生成)
关联
现象
#1294 spec 把
authMode: 'sso:okta'直接写在 portal 元数据里。但 IdP 配置(issuer / client_id / client_secret / cert)是租户级运行时数据,模板作者根本不知道客户用哪家 IdP。复现
authMode: 'sso:okta'— 模板就只能给 A 用分阶段建议
M3:把元数据声明和运行时配置拆开。
元数据(模板可写):
运行时(租户管理员配置):
sys_identity_provider(已有?查 SOT):tenant + protocol + issuer + clientId + clientSecret验收
关联
packages/spec/src/identity/