设置 OIDC
功能可用范围
- 适用于 Enterprise 方案。
- 你需要是实例所有者或管理员,才能启用和配置 OIDC。
功能可用范围
自 n8n 2.18.0 起,可以通过环境变量配置 OIDC,无需使用界面。请参阅 SSO 环境变量。
设置并启用 OIDC
-
在 n8n 中,前往 Settings(设置)> SSO。
-
在 Select Authentication Protocol(选择身份验证协议)下拉菜单中选择 OIDC。
-
复制显示的重定向 URL(例如
https://yourworkspace.app.n8n.cloud/rest/sso/oidc/callback)。负载均衡器或代理的额外配置
如果 n8n 部署在负载均衡器之后,请务必设置
N8N_EDITOR_BASE_URL环境变量。 -
在身份提供方(IdP)中设置 OIDC。你需要:
- 在 IdP 中创建新的 OIDC 客户端或应用。
- 配置上一步获取的重定向 URL。
- 记下 IdP 提供的 Client ID(客户端 ID)和 Client Secret(客户端密钥)。
-
在 IdP 中查找 Discovery Endpoint(发现端点,也称 well-known 配置端点)。其格式通常如下:
https://your-idp-domain/.well-known/openid-configuration -
在 n8n 中完成 OIDC 配置:
- Discovery Endpoint(发现端点):填写 IdP 的发现端点 URL。
- Client ID(客户端 ID):填写在 IdP 中注册应用时获得的客户端 ID。
- Client Secret(客户端密钥):填写在 IdP 中注册应用时获得的客户端密钥。
-
选择 Save settings(保存设置)。
-
将 OIDC 设为 Activated(已启用)。
实例与项目访问权限预配
n8n 支持通过 SSO 预配实例角色和项目角色。用户通过 OIDC 登录时,n8n 可以根据 IdP 响应中的声明,自动分配其实例角色和项目访问权限。
自 n8n 1.122.2 起支持角色预配。
选择角色分配方式
在 n8n 中,前往 Settings(设置)> SSO。使用 Role assignment(角色分配)下拉菜单,选择如何为通过 SSO 登录的用户分配角色。默认值为 Assigned manually in n8n(在 n8n 中手动分配)。
可选项如下:
- Assigned manually in n8n(在 n8n 中手动分配):管理员直接在 n8n 中分配所有角色,不自动映射 IdP 中的角色。
- Instance roles via SSO(通过 SSO 分配实例角色):n8n 在用户登录时从 IdP 读取其实例角色,项目访问权限仍在 n8n 中手动管理。
- Instance and project roles via SSO(通过 SSO 分配实例与项目角色):n8n 在用户登录时从 IdP 读取实例角色和项目访问权限。
每次登录都会重新计算角色,因此 IdP 中的更改会在用户下次登录时生效。
现有访问权限将被覆盖
启用任一 SSO 预配模式后,对于在 n8n 中授予、但未体现在 IdP 响应中的访问权限,n8n 会在用户下次登录时将其移 除。
保存此更改前,n8n 会要求你下载两个包含当前访问设置的 CSV 文件。请保留以供参考。
选择角色映射方法
将 Role assignment(角色分配)设为 Instance roles via SSO(通过 SSO 分配实例角色)或 Instance and project roles via SSO(通过 SSO 分配实例与项目角色)后,会显示 Role mapping method(角色映射方法)下拉菜单,可选择:
- Map rules on your IdP(在 IdP 中映射规则):n8n 直接从 IdP 响应读取 n8n 专用声明(
n8n_instance_role和n8n_projects)。IdP 管理员配置每个用户或组应获得的 n8n 角色或项目。 - Map rules inside n8n(在 n8n 中映射规则):在 n8n 中定义表达式,根据用户的 OIDC 声明计算并返回角色。如果 IdP 无法表达 n8n 专用的角色逻辑,或 IT 管理流程导致 IdP 端更改较慢,可使用此选项。
在 IdP 中映射规则
在 OIDC 授权服务器中添加名为 n8n 的额外作用域,并包含以下两个声明:
| 名称 | 数据类型 | 作用域 | 令牌类型 |
|---|---|---|---|
n8n_instance_role | 字符串 | n8n | ID |
n8n_projects | 字符串数组 | n8n | ID |
授权服务器发出的 ID Token 必须始终包含这两个声明。请为 IdP 中可以访问 n8n 的用户组配置这些声明。
配置 n8n_instance_role 声明
n8n_instance_role 是在 IdP 中为组或用户配置的字符串。如果未设置值,n8n 会回退到 global:member。
支持的实例角色:
global:memberglobal:adminglobal:chatUser
配置 n8n_projects 声明
n8n_projects 是在 IdP 中为组或用户配置的字符串数组,每个元素都必须符合 <project-id>:<role> 格式。
例如:
bHsykgeFirmIhezz:viewer4K3zrg3DvlMFFTB7:editordCjnYuEpYOUBVaNe:admin
对于启用项目预配时已存在的访问权限,可以在下载的 CSV 文件中查找项目 ID。
对于新项目,可在浏览器中查看项目时,从 URL 获取项目 ID。在 URL <your-domain>/projects/VVRWZaq5DRxaf9O1/workflows 中,项目 ID 为 VVRWZaq5DRxaf9O1。