Skip to content

[portal] SSO 必须分层:元数据声明 vs 租户运行时 IdP 配置(GAP-5 of #1294) #1335

@xuyushun441-sys

Description

@xuyushun441-sys

现象

#1294 spec 把 authMode: 'sso:okta' 直接写在 portal 元数据里。但 IdP 配置(issuer / client_id / client_secret / cert)是租户级运行时数据,模板作者根本不知道客户用哪家 IdP。

复现

  1. 模板作者写 helpdesk 模板,要支持企业 SSO
  2. A 客户用 Okta,B 客户用 Azure AD,C 客户用 Auth0
  3. 当前 spec 要求模板里写死 authMode: 'sso:okta' — 模板就只能给 A 用
  4. 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 对象元数据自动生成)

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions