使用 Auth0 配置控制台 SSO
单点登录 (SSO) 允许用户使用一组凭证访问多个应用程序,从而简化身份验证过程。在 API7 企业版中,SSO 支持多种协议,并提供了从现有身份提供商 (IdP) 导入并管理用户的能力。
本指南将引导你通过 OpenID Connect (OIDC) 协议使用 Auth0 作为身份提供商为 API7 企业版控制台配置单点登录 (SSO),并为导入的用户设置角色和权限边界映射。
设置 SSO 集成
本节将指导你使用 Auth0 作为身份提供商为 API7 企业版控制台配置单点登录 (SSO)。
配置 Auth0
- 在 Applications(应用程序)下,创建一个新的 application(应用程序),指定一个自定义名称(例如,
API7 Dashboard),并选择 Regular Web Applications(常规 Web 应用程序)作为应用程序类型。- 在 Settings(设置)选项卡下,记录 Client ID(客户端 ID)、Client Secret(客户端密钥)和 Domain (Issuer)(域名或签发者)以备 后用。
- 在 Connections(连接)选项卡下,确保启用了 Username-Password-Authentication 内置数据库连接。
- 在 User Management > Users(用户管理 > 用户)下,创建一个 user(用户)并配置其密码。根据需要更新用户名。
- 查看应用程序位于
https://<DOMAIN>/.well-known/openid-configuration的发现文档 (discovery document):- 找到
end_session_endpointURL,例如,https://<DOMAIN>.us.auth0.com/oidc/logout。记录此值以备后用。 - 查看
claims_supported以备稍后在 API7 中配置属性映射。
- 找到
- 完成下面的创建控制台登录选项说明,因为后续配置需要来自 API7 的信息。
- 在该应用程序中,位于 Connections(连接)选项卡下:
- 在 Allowed Callback URLs(允许的回调 URL)中配置回调 URL。
- 在 Allowed Logout URLs(允许的注销 URL)中配置
post_logout_redirect_uri的值,例如,https://dashboard.your-company.com。 - 在 Allowed Web Origins(允许的 Web 源)中配置控制台地址。
配置现已完成。你现在应该能够使用新的登录选项登录 API7 控制台了。
如果你在应用程序的 Connections(连接)选项卡下启用了 google-oauth2 内置社交连接并允许用户使用其社交账号登录 API7,这些用户在至少登录一次 API7 之前不会出现在 Auth0 的 User Management(用户管理)中。在他们首次登录后,这些用户将在 Auth0 中可见,然后你可以为他们分配角色。
创建控制台登录选项
API7 企业版支持使用多种协议的单点登录 (SSO)。通过与现有的用户系统集成,它允许用户无需创建新账号即可访问 API7 企业版。
- 从顶部导航栏选择 组织 (Organization),然后选择 设置 (Settings)。
- 点击 添加登录选项 (Add Login Option)。
- 填写配置:
- 名称 (Name):唯一的登录名称。该名称应易于用户识别。例如,如果你将名称配置为
Employee Account,你将在控制台登录页面看到Login with Employee Account(使用员工账号登录)选项。 - 提供商 (Provider):选择
OIDC。 - 签发者 (Issuer):OpenID Connect 提供商的签发者 URL,例如
https://<DOMAIN>/。请确保在 URL 末尾包含尾部的斜杠。 - 客户端 ID (Client ID):OIDC 提供商为你分配的应用程序的唯一标识符,例如
opqOFcwhzoRMRAekG1rfp7VdpU63tKsv。 - 客户端密钥 (Client Secret):由 OIDC 提供商分配用于身份验证的密钥。
- 请求范围 (Request Scope):向 OIDC 提供商请求的范围 (Scope) 值,这定义了访问级别和令牌 (Token) 中包含的声明 (Claims)。
openid范围对于所有的 OIDC 请求都是强制的。可以根据需要添加其他范围,以空格分隔。例如,openid profile email。 - 根 URL (Root URL):用户访问 API7 控制台的根地址,例如
https://dashboard.your-company.com。此 URL 必须与用户在浏览器中输入的内容完全匹配,包括协议(HTTP 或 HTTPS)以及端口号(如果不同于标准端口 80 或 443)。- 回调 URL 将自动生成为
<Root_URL>/api/oidc/<LOGIN_OPTION_ID>/callback。
- 回调 URL 将自动生成为
- SSL 验证 (SSL verify):是否验证 OIDC 提供商的 SSL/TLS 证书。
- 注销 URL (Logout URL):结束用户会话并将其重定向到登录页面的 URL。这应该是带有设置为 API7 控制台 URL 的
post_logout_redirect_uri查询参数的end_session_endpointURL,例如https://<DOMAIN>.us.auth0.com/oidc/logout?post_logout_redirect_uri=https://dashboard.your-company.com。 - 属性映射 (Attributes Mapping):API7 用户字段映射到 OIDC 声明。例如:
- username:
name - email:
email - name:
name
- username:
- 点击 添加 (Add)。
- 在新的 OIDC 登录选项中,找到 回调 URL (Callback URL),例如
https://dashboard.your-company.com/api/oidc/<LOGIN_OPTION_ID>/callback。 - 返回到上面的配置 Auth0 步骤 5。
如果完成了上述所有步骤,API7 控制台登录页面上现在应该出现一个新的登录选项,允许你使用在 IdP 中创建的用户进行身份验证。用户登录后,以管理员用户身份登录,导航至顶部导航栏中的 组织 (Organization),然后选择 用户 (Users) 以查看该用户。
请注意,该用户尚未分配任何角色,因此缺乏在控制台中管理资源的权限。
在控制台中删除用户会移除其在 API7 控制台中分配的所有角色和权限边界,但该用户仍然可以作为新用户登录。若要完全撤销对 API7 控制台的访问权限,必须从 IdP 中移除该用户。
管理用户角色和权限
启用自动映射后,导入的用户可以根据其来自身份提供商的属性(如头衔、职位或部门)自动分配角色和权限边界。这些角色和权限边界在用户每次登录时进行同步,确保访问权限的一致性。一个登录选项的映射可以包含多个规则,这些规则共同决定用户的访问权限。
配置 Auth0
角色和权限边界映射依赖于在 IdP 中配置并传递给 API7 企业版的值。相同的 IdP 配置适用于设置角色和权限边界的映射。
在生产环境中,建议实施细粒度的权限控制。例如,你可以 在 API7 中创建详细的权限并将其绑定到一个角色,然后使用 API7 登录选项设置将每个 Auth0 角色显式映射到相应的 API7 角色。最后,在 Auth0 中手动或通过 Action 为每个用户分配适当的角色,以确保适当的访问控制。
-
在 User Management > Roles(用户管理 > 角色)下,创建一个新角色,例如
admin。 -
将此角色分配给在 API7 中需要管理员权限的用户。
-
要使角色对你的应用程序可用,请在 Actions > Triggers(操作 > 触发器)下创建一个
post-login(登录后)触发器。创建一个操作Inject Roles Claim并部署以下代码:exports.onExecutePostLogin = async (event, api) => {
// List of roles assigned to users in Auth0
const roles = (event.authorization && event.authorization.roles) || [];
// Use a namespace in the form of a URL for custom claims to avoid conflicts.
const claimName = "https://dashboard.your-company.com/roles";
// Write roles to ID Token and Access Token (array)
api.idToken.setCustomClaim(claimName, roles);
api.accessToken.setCustomClaim(claimName, roles);
}; -
将创建的操作拖拽至 Post Login (登录后) 触发器并应用更改。
在控制台中配置映射
本节描述如何在 API7 企业版控制台中配置角色和权限边界映射,以定义如何将来自身份提供商的用户属性转换为访问控制。
启用角色映射
- 从顶部导航栏选择 组织 (Organization),然后选择 设置 (Settings)。
- 选择该登录选项。
- 启用 角色映射 (Role Mapping)。
- 填写配置:
- 内部角色 (Internal Role):要在 API7 企业版中分配的角色。例如,
Super Admin(超级管理员)。 - 角色属性 (Role Attribute):指向 IdP 中相应属性的 JSONPath。该属性应对应于 UserInfo 中的一个声明,例如
$['https://dashboard.your-company.com/roles']。 - 操作符 (Operation):用于匹配属性值的比较方法。例如,
Exact Match in Array(数组精准匹配)。 - 角色值 (Role Value):属性的值,例如
admin。
- 点击 启用 (Enable)。
现在,所有在 IdP 中 roles 属性设置为 admin 的用户将在下次登录时自动被分配 Super Admin(超级管理员)角色。
请注意,角色映射是动态的。如果用户在 IdP 中的属性发生更改,其角色将根据角色映射规则在下次登录 API7 企业版时自动更新。
启用权限边界映射
- 从顶部导航栏选择 组织 (Organization),然后选择 设置 (Settings)。
- 选择之前创建的登录选项。
- 启用 权限边界映射 (Permission Boundary Mapping)。
- 填写配置:
- 权限策略 (Permission Policy):要在 API7 企业版中分配的权限策略。例如,你可以创建一个诸如
Admin License Restricted(管理员许可证受限)的策略,该策略授予完全的资源访问权限但限制更新许可证;并将该策略应用于此字段。 - 权限边界属性 (Permission Boundary Attribute):指向 IdP 中相应属性的 JSONPath。该属性应对应于 UserInfo 中的一个声明,例如
$['https://dashboard.your-company.com/roles']。 - 操作符 (Operation):用于匹配属性值的比较方法。例如,
Exact Match in Array(数组精准匹配)。 - 权限边界值 (Permission Boundary Value):IdP 属性的值。例如,
admin。
- 点击 启用 (Enable)。
现在,所有在 IdP 中 roles 属性设置为 admin 的用户将在下次登录时自动被分配 Admin License Restricted(管理员许可证受限)的权限边界。
请注意,权限边界映射是动态的。如果用户在 IdP 中的属性发生更改,其权限边界将根据映射规则在下次登录 API7 企业版时自动更新。
删除登录选项
删除登录选项将移除在 API7 控制台中与该选项关联的所有用户。
- 从顶部导航栏选择 组织 (Organization),然后选择 用户 (Users)。
- 检查是否仍有用户正在使用该登录选项。如果是,在进行任何更改前通知他们。
- 从顶部导航栏选择 组织 (Organization),然后选择 设置 (Settings)。
- 点击目标登 录选项的 删除 (Delete)。