Skip to Content

使用 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 用户资料

身份提供商返回的用户资料不会自动同步到账户表。需要姓名、邮箱、头像或其他信息时:

  1. 根据业务需要,在账户表中添加用于保存资料的自定义字段。
  2. 创建一个行为流,并在“运行代码”节点中读取本次 SSO 的账户 ID 和用户资料。
  3. 检查身份提供商实际返回的字段,并输出后续节点需要的数据。
  4. 使用数据库修改节点,以账户 ID 为过滤条件,将资料写入对应的账户自定义字段。
  5. 单点登录或注册 的成功处理中调用该行为流。

“运行代码”节点可以从 SSO 上下文读取数据:

const accountId = context.getSsoAccountId() const userInfo = JSON.parse(context.getSsoUserInfo()) return { accountId, userInfo, }

不同身份提供商返回的用户资料结构并不相同。请先在行为流日志中确认 userInfo,再设置“运行代码”节点出参和数据库字段映射;不要假定一定存在 usernameemail 或其他字段。

发布并测试

发布 SSO、行为流和页面修改,然后在非登录状态下测试完整流程:

  1. 发起单点登录或注册。
  2. 在身份提供商页面授权。
  3. 确认能够返回应用并完成登录。
  4. 检查账户绑定以及自定义用户资料是否正确写入。
  5. 再次使用同一身份登录,确认不会重复创建账户。

常见问题

  1. 身份提供商提示回调地址不匹配:逐字符核对 Zion 生成的回调地址与身份提供商配置,包括协议和尾部斜杠。
  2. 授权完成但登录失败:检查客户端 ID、客户端密钥、Token 地址、用户信息地址和用户唯一标识字段。
  3. 登录成功但用户资料为空:检查 scope 是否包含对应资料权限,并查看身份提供商实际返回的 userInfo
  4. 成功后的页面行为没有执行:SSO 会发生页面跳转。需要继续执行的逻辑应放在成功处理所调用的行为流中。
  5. 同一用户产生多个账户:确认 userIdAttribute 使用身份提供商稳定且唯一的用户标识,不要使用可能变化或重复的显示名称。
Last updated on