跳转到内容

管理员配置 OAuth2 SSO 登录(以 Keycloak 为例)

本文说明如何在 SwanLab 中配置 OAuth2 SSO Provider,以及 IdP 侧需要填写的回调地址和字段映射。

一、功能简介

OAuth2 SSO 适用于只提供 OAuth2 Authorization Code 流程的身份服务。SwanLab 会跳转到 IdP 授权页,使用授权码换取 Access Token,再调用 Userinfo 接口读取第三方用户信息。

账号策略:

  • 首次 OAuth2 登录必须绑定已有 SwanLab 账号。
  • 已绑定用户:认证成功后直接登录。

二、操作流程

2.1 SwanLab 配置

  1. 在 SwanLab 管理员控制面板点击创建 OAuth2

  1. 填写基础配置
字段是否必填说明
名称Provider 唯一标识,最多 25 个字符,只允许字母、数字、下划线、连字符
展示名称登录按钮展示的名称,最多 100 个字符

  1. 填写 OAuth2 配置
字段是否必填说明
Client IDIdP 上配置的 Client ID,一般在 IdP 上配置时手动填写
Client SecretIdP 分配给 SwanLab 的 OAuth2 Client Secret,一般为 IdP 自动生成,需要从 IdP 获取
授权地址OAuth2 Authorization Endpoint,不同认证服务可能不同,需要查看 IdP 文档获取
Access Token 地址使用授权码换取 Access Token 的 Token Endpoint,不同认证服务可能不同,需要查看 IdP 文档获取
用户信息地址使用 Access Token 拉取用户资料的 Userinfo Endpoint,不同认证服务可能不同,需要查看 IdP 文档获取
Scopes空格分隔的授权范围,留空时默认 openid profile,但建议手动填写

其中“授权地址”、“Access Token 地址”、“用户信息地址”是 OAuth2 协议内容,但不同服务并没有统一的路径要求,例如对于“授权地址”:

  • keycloak:https://<IdP URL>/realms/<realm name>/protocol/openid-connect/auth
  • authentik: https://<IdP URL>/application/o/authorize/

在这里以 keycloak 为例:

  1. 填写用户映射
字段是否必填说明
用户 ID 字段第三方用户唯一 ID 对应的字段名
用户名字段第三方用户名对应的字段名
用户唯一 ID 推荐字段用户名推荐字段
iduiduser_idsubusernameloginpreferred_username

  1. 填写展示配置

图标 URL 推荐填写在线链接

  1. 启用 IdP

创建后即可在列表中查看当前已有 IdP,启用后即可进行测试、使用:

  1. 在登录列表中查看

三、IdP 侧配置

重点需要在 IdP 的 OAuth2 应用中配置 Redirect URI:

text
https://<SwanLab 外部访问地址>/api/auth/sso/oauth2/callback/<Provider 名称>

请确保该地址与 SwanLab 实际生成的地址完全一致,包括协议、域名、端口、子路径和 Provider 名称。 示例:

text
https://swanlab.example.com/api/auth/sso/oauth2/callback/arui-oauth2

keycloak 中的配置为例:

Client Secret 一般由 IdP 生成,需要复制并填写到 SwanLab 配置: