跳转到内容

SwanLab SSO 前置操作说明

配置 SSO 前需要完成的环境、网络、权限和 IdP 准备工作。

一、确认外部访问地址

SSO 依赖浏览器在 SwanLab 与 IdP 之间跳转,因此 SwanLab 必须生成稳定、可被用户浏览器访问的外部 URL。

私有化部署建议在部署配置(values.yaml)中显式设置:

yaml
global:
  settings:
    host: https://swanlab.example.com

该地址应填写用户浏览器访问 SwanLab 的站点根地址,不需要手动追加任何路径:

用户访问地址推荐配置
https://swanlab.example.comhttps://swanlab.example.com

SwanLab 会基于该根地址生成以下协议地址:

text
https://<SwanLab 外部地址>/api/auth/sso/...

如果未显式配置,系统会尝试通过请求信息推断外部地址。生产环境不建议使用默认推断,这可能会导致某些问题。

二、网络

2.1 HTTPS

建议所有 SSO 环境使用 HTTPS。很多 IdP 默认要求回调地址使用 HTTPS,浏览器 Cookie、安全跳转和企业网关策略也通常要求 HTTPS。 如果测试环境必须使用 HTTP,请先确认 IdP 是否允许 HTTP Redirect URI、ACS URL 或 Metadata URL。

2.2 连通性

SwanLab 服务端需要能访问 IdP 的相关地址:

协议SwanLab 服务端需要访问
OAuth2Authorization Endpoint、Token Endpoint、Userinfo Endpoint
OIDCIssuer Discovery、Token Endpoint、JWKS 地址
SAML2IdP Metadata URL、IdP SSO 地址

如果私有化环境在内网,请确认 DNS、代理、防火墙、证书信任链都已配置完成。

当前 SSO 访问 IdP 的服务端请求超时时间为 10 秒。

三、服务器设置

OIDC 和 SAML2 都会校验令牌或断言的有效时间。请确保 SwanLab 服务端和 IdP 服务端时间同步,建议启用 NTP。 时间偏差过大可能导致:

  • OIDC ID Token 过期或尚未生效。
  • SAML Assertion 过期或尚未生效。
  • SAML Audience/Conditions 校验失败。

四、准备用户字段

配置任何协议前,都需要先和 IdP 管理员确认以下字段:

字段要求用途
第三方用户唯一 ID稳定、唯一、不可复用、不能为空唯一标识某 IdP 中的第三方用户,重复则将导致绑定和自动创建失败
第三方用户名建议稳定、符合 SwanLab 用户名规则私有化 OIDC/SAML2 自动创建账号时作为默认用户名

不建议把姓名、昵称、部门名等可能重复或变化的字段作为用户唯一 ID。

推荐选择:

协议用户唯一 ID 推荐字段用户名推荐字段
OAuth2iduiduser_idsubusernameloginpreferred_username
OIDCsubpreferred_usernamename
SAML2uidemployeeNumberemail 等稳定 Attributeusernameuid

注意:

  • 字段映射填写的是 IdP 返回数据中的字段名,不是某个用户的实际字段值。
  • 不建议使用邮箱作为用户名,特殊字符将导致校验失败

五、准备 Provider 基础信息

所有协议都需要填写以下基础字段:

序号字段是否必填说明
1名称Provider 唯一标识,最多 25 个字符,只允许字母、数字、下划线、连字符
2展示名称登录按钮展示的名称,最多 100 个
3用户 ID 字段第三方用户唯一 ID 对应的字段名
4用户名字段第三方用户名对应的字段名
5图标 URL登录入口展示的图标 URL
6排序值非负整数,数值越大越靠前

Provider 名称会出现在回调地址中。上线后修改名称,通常需要同步修改 IdP 中的回调地址或 SAML 配置。若无必要请保证名称始终不变。

5.1 OAuth2

5.2 OIDC

5.3 SAML2

六、配置变更后验证

如果修改了以下内容,建议在 SwanLab 管理后台重新保存 Provider,并再次使用测试功能确认配置是否生效:

  • OIDC Issuer、Client、证书或 JWKS。
  • SAML2 Metadata、证书、私钥、ACS、EntityID 或属性映射。
  • SwanLab 外部访问地址、部署路径或 Provider 名称。

SwanLab 后台对于 OIDC/SAML2 会缓存 IdP 信息,若 IdP 侧信息发生改变,SwanLab 不一定会及时同步相关更新,可以通过修改 SwanLab 中对应配置的任意字段刷新缓存。