使用 SSO
单点登录(Single Sign-On,SSO)允许用户通过外部身份提供商完成身份验证。Zion 负责发起授权、接收回调并建立账户绑定;如果需要保存身份提供商返回的姓名、邮箱或其他资料,需要在 SSO 成功后的行为流中自行处理。
配置流程
添加 SSO
打开顶部的 行为,进入 登录 → 单点登录(SSO),点击添加并选择身份提供商。
Zion 会生成当前配置的回调地址。稍后需要将该地址填写到身份提供商的 OAuth 或 OIDC 应用配置中。
在身份提供商中注册应用
在身份提供商的开发者控制台创建 Web 应用,并配置:
- 应用名称、主页、隐私政策和服务条款
- 允许的来源域名(如果身份提供商要求)
- Zion 生成的回调地址
- 当前业务需要的最小授权范围
⚠️
回调地址必须与 Zion 显示的地址完全一致,包括协议、域名、路径和尾部斜杠。不要把项目发布地址当作回调地址。
创建完成后,复制客户端 ID 和客户端密钥。客户端密钥属于敏感凭证,不要写入页面、客户端变量或前端代码。
完成身份提供商配置
返回 Zion,根据身份提供商文档填写对应字段:
| 字段 | 说明 |
|---|---|
| clientId | 身份提供商生成的客户端 ID |
| clientSecret | 身份提供商生成的客户端密钥 |
| scope | 需要请求的授权范围,多个值按身份提供商要求分隔 |
| authorizationUri | 发起用户授权的地址 |
| tokenUri | 使用授权码换取 Token 的地址 |
| userInfoUri | 获取用户资料的地址 |
| userIdAttribute | 用户资料中用作身份唯一标识的字段 |
不同身份提供商显示的字段可能不同。以其 OAuth/OIDC 文档和 Zion 表单中的必填标记为准。保存配置并启用 SSO。
添加 SSO 行为
在页面或组件的触发器中,从用户相关行为中选择:
| 行为 | 作用 |
|---|---|
| 单点登录或注册 | 已绑定时登录;未绑定时创建账户并建立 SSO 绑定 |
| 单点登录绑定 | 将当前登录账户与 SSO 身份绑定 |
| 单点登录解绑 | 解除当前账户与 SSO 身份的绑定 |
SSO 授权会离开当前页面并在完成后跳转,因此原页面变量和后续前端行为不会继续执行。需要在成功后处理业务逻辑时,配置并调用行为流。
处理 SSO 用户资料
身份提供商返回的用户资料不会自动同步到账户表。需要姓名、邮箱、头像或其他信息时:
- 根据业务需要,在账户表中添加用于保存资料的自定义字段。
- 创建一个行为流,并在“运行代码”节点中读取本次 SSO 的账户 ID 和用户资料。
- 检查身份提供商实际返回的字段,并输出后续节点需要的数据。
- 使用数据库修改节点,以账户 ID 为过滤条件,将资料写入对应的账户自定义字段。
- 在 单点登录或注册 的成功处理中调用该行为流。
“运行代码”节点可以从 SSO 上下文读取数据:
const accountId = context.getSsoAccountId()
const userInfo = JSON.parse(context.getSsoUserInfo())
return {
accountId,
userInfo,
}不同身份提供商返回的用户资料结构并不相同。请先在行为流日志中确认 userInfo,再设置“运行代码”节点出参和数据库字段映射;不要假定一定存在 username、email 或其他字段。
发布并测试
发布 SSO、行为流和页面修改,然后在非登录状态下测试完整流程:
- 发起单点登录或注册。
- 在身份提供商页面授权。
- 确认能够返回应用并完成登录。
- 检查账户绑定以及自定义用户资料是否正确写入。
- 再次使用同一身份登录,确认不会重复创建账户。
常见问题
- 身份提供商提示回调地址不匹配:逐字符核对 Zion 生成的回调地址与身份提供商配置,包括协议和尾部斜杠。
- 授权完成但登录失败:检查客户端 ID、客户端密钥、Token 地址、用户信息地址和用户唯一标识字段。
- 登录成功但用户资料为空:检查 scope 是否包含对应资料权限,并查看身份提供商实际返回的
userInfo。 - 成功后的页面行为没有执行:SSO 会发生页面跳转。需要继续执行的逻辑应放在成功处理所调用的行为流中。
- 同一用户产生多个账户:确认
userIdAttribute使用身份提供商稳定且唯一的用户标识,不要使用可能变化或重复的显示名称。
Last updated on