申请接入¶
通过SAI 用户手册中的联系渠道向运营团队提交以下信息。客户端由运营审核后统一登记,不提供匿名客户端注册。
提交应用信息¶
| 信息 | 要求与示例 |
|---|---|
| 负责人及运维联系人 | 能确认应用归属、处理故障和凭据轮换的联系人 |
| 应用名称与用途 | 用户能认出的名称,说明为何需要 SAI 登录及哪些资料 |
| 应用首页 | 例如 https://app.example.org/ |
| 使用环境 | 生产与测试分别登记,分别保管凭据 |
| 客户端类型 | 有服务端的网页应用,或无法安全保密的客户端 |
| 登录回调地址 | 例如 https://app.example.org/oidc/callback,逐条提交完整 HTTPS URL |
| 退出返回地址 | 例如 https://app.example.org/signed-out |
| 服务端退出通知地址 | 例如 https://app.example.org/oidc/backchannel-logout,供 SAI 服务器调用 |
| 所需权限(scope) | 一般从 openid profile 开始;需要邮箱时申请 email,说明用途 |
| 客户端认证 | 首选 private_key_jwt,提交公钥或可读取的 HTTPS JWKS 地址及轮换安排 |
| 用户标识隔离 | 提交应用归属和回调域名;由登记流程确认 sector,不自行复制其他应用配置 |
| 会话要求 | 说明在线使用、续期及退出需求;离线或机器访问另行评审 |
URL 区分协议、主机、端口、路径、尾斜线和查询参数。禁止通配回调、片段标识符、开放重定向页面,以及把任意用户传入地址作为回调。
跨多个回调域名时,运营会审核 sector identifier 配置;若需要 sector 文档,其 HTTPS 内容应为全部获批登录回调 URL 的 JSON 数组。公开用户标识隔离不以 URI 的路径名区分,不要把同一主机下的不同文件误当作不同 sector。
登记后获得什么¶
登记结果应明确:client_id、客户端类型、认证方式、准确的回调/退出地址、允许的 scopes、签名算法和会话政策。
private_key_jwt 的私钥由应用保管,SAI 登记其公钥。若批准使用 client_secret_basic,通过约定的受保护渠道交接客户端密钥。不要将私钥、密钥、授权码或令牌发到普通聊天、工单正文或代码仓库。
示例中的 example-web 只是占位客户端 ID,不能用于实际登录。本文不提供一个所有应用共用的客户端。
用户同意与应用权限¶
运营批准 scope 是应用可申请的上限,用户的授权决定本次实际可用范围。应用只请求当前功能需要的 scope,并以响应中的实际授权为准。
用户拒绝授权时应回到应用可用的入口,不循环发起登录。新增 scope 需重新走授权流程,刷新令牌不能替代新的用户同意。撤销授权不等于删除应用已有的业务数据;数据保存和删除按应用自己的规则处理。
客户端注册和用户注册是两件事:应用不要采集 SAI 密码、验证码或身份验证器密钥。用户通过 SAI 的同一个登录入口完成认证。
变更与退出接入¶
回调域名、scope、公钥、负责人或认证方式变化时,沿同一支持渠道申请更新。密钥轮换先登记新公钥并验证,再按约定退役旧钥;不要自行更换 issuer、sector 或账号映射。
应用停止接入时,由运营撤销客户端及关联授权,应用同步停止使用相关令牌并处理本地会话。仅删除应用本地 Cookie 不能代替服务端撤销。