跳转到内容

SwanLab SSO 功能说明 ​

本文说明 SwanLab 当前版本的 SSO 能力、适用场景、账号策略和用户登录流程。当前版本支持 OAuth2、OIDC 和 SAML2 三类协议。

商用版功能

SSO 单点登录仅在 SwanLab 商用版中支持,社区版不包含此功能。

一、功能简介 ​

SSO(Single Sign-On,单点登录)允许用户使用企业已有身份提供商(IdP)的账号登录 SwanLab。管理员在 SwanLab 中配置 Provider 并启用后,登录页会展示对应的 SSO 登录入口。用户点击入口后,会跳转到企业 IdP 完成认证,再返回 SwanLab 完成登录、绑定或自动创建账号。

二、支持范围 ​

协议当前支持内容适用场景
OAuth2Authorization Code、Access Token、Userinfo、字段映射通用 OAuth2 身份源、企业自建 OAuth2 服务
OIDCDiscovery、Authorization Code、ID Token 校验、nonce 校验、claims 映射Keycloak、Okta、Authing、Azure AD 等标准 OIDC 服务
SAML2SP 发起登录、签名 AuthnRequest、ACS、SP Metadata、AudienceRestriction 校验企业 SAML IdP、ADFS、Keycloak SAML、Authentik、Okta SAML

当前限制:

  • SAML2 仅支持 SP-initiated 登录,不支持从 IdP 门户直接发起登录。

三、私有化账号策略 ​

私有化环境下,SSO 登录后的账号处理策略如下:

场景处理方式
已绑定第三方身份认证成功后直接登录 SwanLab
未绑定 OAuth2 身份用户使用已有 SwanLab 账号的用户名和密码完成绑定后登录
未绑定 OIDC 身份SwanLab 自动创建账号并绑定
未绑定 SAML2 身份SwanLab 自动创建账号并绑定

3.1 自动创建 ​

OIDC/SAML2 首次登录且第三方身份未绑定时,SwanLab 会自动创建账号:

  1. 优先使用 IdP 返回并映射出的用户名。
  2. 如果用户名合法且未被占用,页面会静默创建账号并登录。
  3. 如果用户名为空、不合法或已被占用,页面会要求用户手动修改用户名。
  4. 创建成功后,第三方身份会自动绑定到新账号。

用户名规则:

text
长度:1 到 25 个字符
字符:字母、数字、下划线、连字符

自动创建还会检查私有化 License 用户席位。如果席位不足,创建会失败,需要管理员先释放或增加用户席位。

3.2 解绑策略 ​

用户可以在账号设置中查看或管理自己的绑定关系:

  • OAuth2 允许用户解绑。
  • OIDC/SAML2 自动创建的账号暂不允许用户自行解绑。

四、用户登录流程 ​

  1. 用户打开 SwanLab 登录页,点击企业配置的 SSO 登录入口。
  2. 页面跳转到企业身份提供商,用户使用企业账号完成认证。
  3. 认证成功后,用户回到 SwanLab。
  4. SwanLab 根据当前账号状态完成登录、绑定已有账号,或自动创建账号。

已绑定用户会直接登录 SwanLab。如果绑定的 SwanLab 用户已被禁用,本次登录会被阻止。

五、管理员可用操作 ​

管理员可以执行以下操作:

操作说明
创建 Provider新增 OAuth2、OIDC 或 SAML2 Provider
编辑 Provider修改显示名称、协议字段、映射字段、Logo、排序值、启用状态
启用/禁用 Provider只有启用状态的 Provider 会出现在登录页
测试 Provider发起一次 SSO 认证测试,查看字段映射和原始用户信息
删除 Provider删除 Provider,并级联删除该 Provider 下的绑定关系

Provider 测试不会登录、绑定或创建账号,只用于确认 IdP 配置和字段映射是否正确。

  1. 进入管理员控制面板

  2. 进入“身份验证”控制面板,选择协议并创建后可选择是否启用,后续可在“操作”中进行测试、编辑、删除

  3. 已启用的 IdP 将在登录页面显示,点击后即可启动 SSO 认证

六、常见异常 ​

现象常见原因
登录页没有 SSO 入口Provider 未启用,或登录入口未展示
返回地址不匹配IdP 中配置的 Redirect URI、ACS 或 EntityID 与 SwanLab 实际外部地址不一致
能完成 IdP 认证但 SwanLab 登录失败用户字段映射错误,或第三方用户 ID 为空
OIDC 登录失败Issuer/Discovery 不可访问,scope 缺少 openid,ID Token 校验失败,nonce 不匹配
SAML2 登录失败Metadata 不可访问,证书/私钥不匹配,ACS/EntityID 错误,Assertion 缺少映射属性
自动创建账号失败用户名不合法、用户名冲突、License 席位不足