OIDC 提供方与外部绑定
# OIDC 提供方与外部绑定
schema v23 提供 OIDC 配置审核、外部主体绑定和对应管理页面。本页说明管理面操作。后续v24已追加状态、会话与协议入口,v25追加RP退出与材料保留期限;原生系统浏览器客户端已有独立操作手册;认证模式已追加v26,真实双应用IdP验收已通过,操作见浏览器SSO;启用配置不代表完整SSO已交付。当前边界见M5实施记录。
# 部署批准信任档案
先显式执行迁移。部署者在当前环境配置中设置 sso.profiles,平台管理员只能引用批准的档案,不能通过表单增加任意网络地址或文件路径。默认空映射;不会自动创建提供方、绑定或给已有套餐开通能力。
sso:
profiles:
corporate:
issuers: [https://idp.example.invalid]
origins: [https://idp.example.invalid]
return_urls:
- https://app.example.invalid/oidc/callback
- https://app.example.invalid/oidc/logout
- https://app.example.invalid/session
secret_files:
web-client: /run/secrets/oidc-web-client
这里的域名和路径仅用于管理面示意,不能直接用于v24运行面;运行面要求按realm/租户/provider独立的固定回调路径,完整SSO操作手册将在真实IdP验收后补齐。APP_SSO_TRUST_PROFILES 可用完整 JSON/YAML 映射覆盖全部档案,不与文件中的旧映射合并,大小上限64 KiB、最多32档案。相对文件路径按配置文件所在目录解析,环境变量优先。配置值不能放 secret 明文。
issuers 精确匹配,包括路径及大小写;origins 批准后端 discovery/token/JWKS origin,return_urls 单独批准完整浏览器回跳。默认仅访问公网,私网地址必须额外在 address_prefixes 声明 CIDR;DNS 解析后向批准地址拨号,不使用环境代理、不跟随重定向。ca_files 可增加私有 CA,仍校验证书及主机名。开发 HTTP 只支持显式批准的字面 loopback 地址,生产拒绝 allow_loopback_http。
机密客户端的 secret_files 为引用名到外部文件的映射。文件须为私有普通文件,不能是符号链接,内容1至4096字节;允许单个末尾 LF/CRLF,不裁剪其他空格。启用检查只在操作者再鉴别和版本检查成功后读取,失败回滚配置;秘密、路径、原始外部 sub 和协议材料不进入管理响应或审计。部署者可原子替换文件轮换内容。
# 平台维护提供方
平台“OIDC提供方”需要 platform:sso-provider:read,新增、编辑及停用需要 platform:sso-provider:write 和本人当前口令。选择 realm、租户、本地客户端及信任档案:platform 的租户固定0,admin/member 使用真实租户ID;启用租户配置还要求套餐显式拥有 identity.oidc。
本地客户端必须已启用且 grant 为 authorization_code。Web 配置固定登录后地址;native/desktop 只允许公共客户端 none,登录后地址留空。客户端登记方法见 身份客户端与设备会话。上游认证方式明确选择 none、client_secret_post 或 client_secret_basic,机密方式只填写批准的密钥引用名。
realm、租户、编码、本地 client 和 issuer 创建后不可修改。名称、上游 client、档案、认证方式及回跳等变更均推进版本;每域每租户最多100条,停用记录也计入。页面默认创建停用配置。版本冲突 409001 时刷新后核对,不能自动重试覆盖。
专用“停用”命令不依赖 IdP、密钥文件、信任档案或本地 client 当前可用性,故障时仍能关闭;它仍要求当前平台身份、本人再鉴别、版本和同事务审计。平台不能借配置管理身份直接维护租户用户的绑定。
# 维护外部身份绑定
平台“平台外部绑定”只维护 platform 域,需要 platform:sso-binding:read/write。租户后台“外部身份绑定”只维护当前租户 admin/member 域,需要 sso:binding:read/write;写操作还要求保留租户管理员及本人当前口令。member 绑定同时要求当前 identity.members,不接受请求覆盖 tenantId。
先选择当前作用域内已启用的提供方,再填写现有、启用、未锁定且未注销的本地主体ID及精确外部 sub。sub 只接受1至255个可打印 ASCII 字符,大小写敏感,不按邮箱或用户名自动合并,也不自动创建用户。平台、后台用户和会员使用各自明确的主体类型,跨租户或跨类型目标拒绝。
同一 realm/tenant/issuer/sub 只能占有一个本地主体,换用同 issuer 的另一个 provider 不能绕过唯一性;不同租户或 realm 独立。列表只展示范围指纹,不返回原始 sub;指纹用于区分,不是匿名化承诺或认证凭据。账号、客户端、提供方和信任配置在创建/恢复绑定时按当前状态重新检查。
“解绑”保留历史并停用绑定,不删除或释放外部键,也不能将旧键转给同名重建账号。目标已注销或外部配置故障时仍可解绑;重新启用须重新满足全部当前条件。每域每租户最多10000条,停用记录计入。v26已提供认证模式:有效仅SSO账号不能计划移除最后结构性入口;紧急关闭全部提供方后仍可清理坏绑定,但不会自动开放口令。
# API、审计和边界
| 作用域 | 路径与操作 |
|---|---|
| 平台提供方 | /api/platform/v1/identity/providers GET/POST,/{id} PUT,/{id}/disable POST |
| 平台绑定 | /api/platform/v1/identity/bindings GET/POST,/{id} PUT |
| 租户绑定 | /api/admin/v1/identity/bindings GET/POST,/{id} PUT,/providers GET 提供可选项 |
管理接口沿用当前 Bearer、权限、Origin、请求来源标记及统一 JSON/JWE 出口,不复用独立OIDC协议回调的来源规则。查询有界分页,写入严格拒绝未知字段。配置/绑定、版本与领域审计同事务;平台还写平台审计,任何一份审计失败均回滚目标变更。错误口令仍按既有保护记录失败,返回公开中文提示和业务码,不输出数据库异常或秘密。
当前仅对本地 MySQL/PostgreSQL 执行验收;达梦追加迁移源码,未完成新版本认证。实际检查和后续范围见 M5 实施记录。