单点登录
单点登录连接让成员通过企业自己的身份提供方登录 Soln,而不使用 Soln 密码。
打开 账户中心,进入 单点登录。
新建的连接保存后即为启用状态。
钉钉、飞书和企业微信插件安装时会创建对应的单点登录连接,无需再手工创建一条重复连接。按插件展示的回调与入口配置平台,步骤见企业身份插件使用指南及钉钉、飞书、企业微信配置指南。企业微信授权登录还可补充缺失的插件成员绑定。
开始之前
- 需要一个身份提供方管理员账号,用于创建应用、读取 Metadata、登记 Soln 的服务提供方参数
- 需要成员使用的企业邮箱地址;邮箱 Claim 或属性要能匹配到当前空间里的成员
- 在身份提供方登记参数时请保持 Soln 的连接弹窗打开,因为授权回调地址和服务提供方参数都在弹窗里展示
接入 OpenID Connect 连接
- 先在身份提供方注册一个 Web 类型应用,记录它的颁发者地址、Client ID 和 Client Secret
- 回到 Soln,点击左侧菜单 单点登录 右侧的 + 新建连接,先保持弹窗打开
- 把 Soln 弹窗里的 授权回调地址 填到身份提供方对应的 Redirect URI
- 在 Soln 填写连接名称、连接代码(小写字母、数字、
_、-)、颁发者地址、Client ID 和 Client Secret;连接代码和身份协议保存后不可修改 - Token 认证方式按身份提供方注册的客户端类型选择:Client Secret Basic、Client Secret Post 或公共客户端(无 Secret)
- 权限范围保留
openid、profile、email,再把 Claim 映射改成身份提供方实际返回的名称(默认是sub、email、email_verified、name) - 邮箱信任策略二选一:要求邮箱已验证 Claim 为
true,或直接信任身份提供方返回的邮箱;只有选前者时才会读取已验证 Claim - 保存连接后,用连接列表里的 工作台启动地址 发起一次工作台登录,确认能正常登录并落到正确的成员账号
OpenID Connect 默认值
| 字段 | 默认值 | 其他可选 |
|---|---|---|
| 颁发者地址 | – | 身份提供方的 issuer 地址,例如 https://identity.example.com |
| Token 认证方式 | Client Secret Basic | Client Secret Post,或公共客户端(无 Secret) |
| 权限范围 | openid、profile、email | 同样这三个范围 |
| Claim 映射 | sub、email、email_verified、name | 身份提供方实际返回的任意 Claim 名称 |
| 邮箱信任策略 | 要求邮箱已验证 Claim 为 true | 直接信任身份提供方返回的邮箱 |
| 授权回调地址 | Soln 只读展示 | 把它登记为身份提供方的 Redirect URI |
接入 SAML 2.0 连接
- 先在身份提供方创建一个 SAML 应用;因为需要第 3 步的 SP 参数,建议先在 Soln 建好连接
- 在 Soln 点击 单点登录 右侧的 + 新建连接,身份协议选择 SAML 2.0,并填入身份提供方 Metadata(URL 或 XML)
- 在身份提供方按 Soln 弹窗里"服务提供方配置"展示的值登记:SP Entity ID、ACS URL、SLO URL 和 SP 证书
- 在 Soln 配置认证请求绑定、签名与摘要算法、NameID 格式、签名与加密要求、是否允许 IdP 发起登录、认证上下文与比较方式、允许时钟偏差、断言最大有效时间
- 把 SAML 属性映射填成身份提供方实际返回的属性和名称(用户标识、邮箱、姓名)
- 保存连接后,用 工作台启动地址 验证能否正常登录
- 证书到期或需要更换时,按下面的 SP 证书轮换步骤处理
SAML 2.0 默认值
| 字段 | 默认值 | 说明 |
|---|---|---|
| Metadata 来源 | URL | 可选 Metadata URL 或 Metadata XML |
| 认证请求绑定 | HTTP-Redirect | 可选 HTTP-POST |
| 签名算法 | sha256 | 可选 sha512 |
| 摘要算法 | sha256 | 可选 sha512 |
| 要求断言签名 | 开启 | 只有身份提供方无法签名断言时才关闭 |
| 要求响应签名 | 开启 | 只有身份提供方无法签名响应时才关闭 |
| 要求断言加密 | 关闭 | 身份提供方需要加密断言时开启,同时需要把 SP 证书给它 |
| 允许 IdP 发起登录 | 开启 | 关闭后只接受从 Soln 发起的登录 |
| 每次强制重新认证 | 关闭 | 开启后每次登录都要求身份提供方重新认证 |
| NameID 格式 | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress | 身份提供方支持的其他 NameID 格式 |
| 认证上下文 | urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport | 勾选"不发送认证上下文要求"时该项不生效 |
| 认证上下文比较方式 | exact | 可选 minimum、maximum、better |
| 允许时钟偏差 | 120 秒 | 身份提供方时钟漂移时调大 |
| 断言最大有效时间 | 5 分钟 | 超过该时长的断言会被拒绝 |
| 属性映射 | nameID、email、displayName | 必须与身份提供方实际发送的属性一致 |
需要在身份提供方登记的值
| Soln 侧的值 | 身份提供方的对应字段 |
|---|---|
| SP Entity ID | Audience URI / SP Entity ID |
| ACS URL | ACS URL / Reply URL / Assertion Consumer Service URL |
| SLO URL | 单点登出地址(Single Logout URL) |
| SP 证书指纹 | 服务提供方的签名或加密证书 |
| 授权回调地址(仅 OpenID Connect) | Redirect URI / Callback URL |
各身份提供方的字段命名不同,按同样含义把 Soln 弹窗里的值登记过去即可。
验证连接
- 打开连接列表里的 工作台启动地址,或把
.../auth/start?sso=enterprise&provider=<连接代码>(也可用&launch=<启动地址>)发给需要使用该连接的成员 - 用真实的企业账号登录,确认登录落到对应成员账号,而不是新建一个成员
- 回到 用户登录情况 查看:这次会话会出现在列表里,并带登录方式、IP 和 设备信息
常见问题
| 现象 | 检查方向 |
|---|---|
| 断言签名校验失败 | 身份提供方 Metadata 与证书、签名与摘要算法、是否要求断言或响应签名 |
| 身份提供方登录成功,但 Soln 侧拒绝 | 属性映射和 NameID 格式是否与身份提供方实际发送的一致 |
| 提示邮箱未验证 | 邮箱信任策略与已验证 Claim:默认策略要求该 Claim 在 ID Token 中为 true |
| 登录报时间相关错误 | 身份提供方与 Soln 的时钟差,适当调大允许时钟偏差 |
| 加密断言无法解密 | 证书轮换没走完:先让身份提供方重新读取 SP Metadata,再激活待轮换证书 |
| 回调地址被拒绝 | 把 Soln 弹窗里的授权回调地址原样复制到身份提供方的 Redirect URI |
连接列表
| 列 | 说明 |
|---|---|
| 连接 | 连接名称 |
| 协议 | OpenID Connect 或 SAML 2.0 |
| 工作台启动地址 | 使用该连接启动工作台登录的地址:运行环境地址 + /auth/start?sso=enterprise&launch=<启动地址> |
| 状态 | 已启用或已停用 |
| 更新时间 | 连接最近一次修改时间 |
搜索会匹配连接名称、连接代码、颁发者地址或 Client ID。行操作包括 编辑 和 更多(包含证书操作与 删除);删除连接会同时删除由它建立的外部身份绑定。
新建或编辑连接
通用字段:
| 字段 | 说明 |
|---|---|
| 连接名称 / 连接代码 | 连接的显示名称和稳定代码 |
| 身份协议 | OpenID Connect 或 SAML 2.0 |
OpenID Connect 字段:
| 字段 | 说明 |
|---|---|
| 颁发者地址 / Client ID / Client Secret | 在身份提供方注册的应用凭据;Client Secret 留空表示保留当前值 |
| Token 认证方式 | Client Secret Basic(默认)、Client Secret Post,或公共客户端(无 Secret) |
| 权限范围 | 登录时申请的权限范围:openid、profile、email,默认全选 |
| Claim 映射 | 提供用户标识、邮箱和姓名的 Claim |
| 邮箱信任策略 | 要求邮箱已验证 Claim 在 ID Token 中为 true(默认),或直接信任身份提供方返回的邮箱 |
默认 Claim 映射:用户标识取 sub,另外还有 email、email_verified、name。邮箱已验证 Claim 只在信任策略选择"要求邮箱验证 Claim"时才会读取。
SAML 2.0 字段:
| 字段 | 说明 |
|---|---|
| IdP Metadata | 必填;填写合法的 Metadata URL,或直接填写 Metadata XML |
| 认证请求绑定 | 必填;HTTP-Redirect 或 HTTP-POST |
| 签名算法 / 摘要算法 | 必填;请求签名与摘要使用的算法 |
| NameID 格式 | 选填;身份提供方期望的标识格式 |
| 签名与加密要求 | 要求断言签名、响应签名或断言加密 |
| 允许 IdP 发起登录 | 允许身份提供方发起登录 |
| 每次强制重新认证 | 每次登录都要求重新认证 |
| 认证上下文 | 未勾选"不发送认证上下文要求"时必填,同时设置比较方式 |
| 允许时钟偏差 / 断言最大有效时间 | 必填;可接受的时钟偏差和断言最大有效期 |
| SAML 属性映射 | 必填;提供用户标识、邮箱和姓名的 SAML 属性 |
服务提供方配置展示 SP Entity ID、ACS URL、SLO URL、当前 SP 证书 SHA-256 指纹和证书到期时间;证书轮换过程中还会显示待激活和上一张证书的指纹。这些值需要提供给身份提供方。
SP 证书轮换
每一步都会先弹窗二次确认。
- 生成待轮换证书:把新 SP 证书预发布到 Metadata,之后需要先让身份提供方重新读取 SP Metadata
- 激活待轮换证书:新证书开始用于签名和加密,旧证书保留在过渡验证窗口中;只在身份提供方已同步最新 SP Metadata 后才激活
- 停用上一张证书:把上一张证书从 Metadata 移除;确认身份提供方已稳定使用当前证书后再停用,停用后仍用上一张证书加密的断言将无法解密
删除连接会同时删除由它建立的外部身份绑定。