跳到主要内容
版本:3.10.x

使用 SAML 配置 SSO

本指南介绍如何使用 SAML 2.0 协议为 API7 控制台配置单点登录(SSO)。SAML SSO 允许用户通过企业身份提供商(IdP)进行认证,并在无需维护单独账户的情况下访问控制台。

工作原理​

  1. 用户在控制台登录页选择 SAML 登录选项。
  2. 控制台向 IdP 发送 SAML AuthnRequest。
  3. 认证完成后,IdP 会将 SAMLResponse POST 到控制台的断言消费服务(ACS)URL。
  4. 控制台验证 SAML 断言,提取用户属性,并创建或更新用户账户。
  5. 如果配置了角色和权限边界映射,这些映射会在每次登录时应用。

前置条件​

开始前,请确保你已具备:

  • 正在运行且可访问控制台的 API7 网关部署。
  • 符合 SAML 2.0 标准的身份提供商,例如 Microsoft Entra ID、Okta 或 Ping Identity。
  • 来自 IdP 的以下信息:
    • IdP Metadata URL:提供 IdP SAML 元数据 XML 的 URL。
    • 属性名称:username、email 以及所有角色相关属性的声明名称。

第 1 步:创建 SAML 登录选项​

首先在 API7 中创建登录选项,以生成服务提供商(SP)元数据 URL,后续配置 IdP 时需要使用这些 URL。

  1. 在 API7 控制台中,进入 Organization > Settings。
  2. 点击 Add Login Option。
  3. 填写配置:
字段描述示例
Name登录页显示的名称,格式为 "Login with {Name}"Corporate SAML
Provider选择 SAML—
Identity Provider Metadata URLIdP SAML 元数据 XML 的 URLhttps://login.microsoftonline.com/{tenant}/federationmetadata/...
Service Provider Root URL用户访问控制台的 URLhttps://dashboard.example.com
Entity IDSAML 联邦中 SP 的唯一标识。建议使用控制台 URL。https://dashboard.example.com
Attributes Mapping将 SAML 断言属性映射到 API7 用户字段见下方提供商专用部分
Terminate IdP Session on Logout退出时是否重定向到 IdP 进行 Single Logout(SLO)false
  1. 点击 Add。

创建后,登录选项会显示以下自动生成的 URL:

URL用途
ACS URLhttps://<DASHBOARD_URL>/api/saml/<LOGIN_OPTION_ID>/acs——IdP POST SAML 响应的端点
SLO URLhttps://<DASHBOARD_URL>/api/saml/<LOGIN_OPTION_ID>/slo——Single Logout 回调端点
SP Metadata URLhttps://<DASHBOARD_URL>/api/saml/<LOGIN_OPTION_ID>/metadata——可导入 IdP 的 SP 元数据 XML
备注

如果你没有提供自定义证书,API7 会自动生成自签名证书和私钥用于 SAML 请求签名。你也可以在登录选项配置中提供自定义 SP 证书和私钥。

第 2 步:配置 IdP​

使用第 1 步中的 ACS URL 和 Entity ID,在身份提供商中将 API7 控制台注册为服务提供商。

关于特定 IdP 的详细说明,请参阅下方提供商专用配置部分。

第 3 步:验证 SSO 登录​

  1. 退出 API7 控制台。
  2. 在登录页,你应看到一个新选项:Login with {Name}。
  3. 点击该选项,通过 IdP 完成认证。
  4. 认证成功后,你会被重定向回控制台。

SSO 用户会出现在 Organization > Users 下。默认情况下,该用户未分配任何角色。

important

在控制台中删除用户会移除其角色和权限边界,但该用户仍可再次作为新用户登录。若要完全撤销访问权限,请从 IdP 中移除该用户。

配置角色映射​

角色映射会根据 SAML 断言属性自动为 SSO 用户分配 API7 角色。请配置 IdP,使其在 SAML 响应中包含角色相关属性,然后在 API7 中设置映射规则。

信息

自动角色映射优先于手动角色分配。启用映射后,用户下次登录时会覆盖任何手动更改。

启用角色映射​

  1. 在 API7 控制台中,进入 Organization > Settings。
  2. 选择你的 SAML 登录选项。
  3. 启用 Role Mapping。
  4. 配置映射规则:
字段描述示例
Internal Role要分配的 API7 角色Super Admin
Role Attribute指向 SAML 属性的 JSONPath$.Role
Operation比较方式:Exact Match、Contains String、Exact Match in Array 或 Contains String in ArrayExact Match
Role Value期望的属性值admin
  1. 点击 Enable。

权限边界映射​

权限边界映射的工作方式与角色映射相同,但它将权限策略作为边界分配,而不是附加角色。有关策略和边界的定义,请参阅权限策略和权限边界。请在登录选项设置中启用 Permission Boundary Mapping,并使用相同的属性匹配方式配置映射规则。

提供商专用配置​

Microsoft Entra ID (Azure AD)​

IdP 设置​

  1. 在 Azure portal 中,进入 Microsoft Entra ID > Enterprise applications。
  2. 点击 New application > Create your own application:
    • 输入名称,例如 API7 Dashboard。
    • 选择 Integrate any other application you don't find in the gallery (Non-gallery)。
  3. 在 Users and groups 下,添加需要拥有 API7 SSO 访问权限的用户和组。
  4. 在 Single sign-on 下,选择 SAML 并配置:
    • Identifier (Entity ID):使用 API7 中的 Entity ID,例如 https://dashboard.example.com。
    • Reply URL (ACS URL):使用 API7 中的 ACS URL,例如 https://dashboard.example.com/api/saml/<LOGIN_OPTION_ID>/acs。
  5. 在 SAML Signing Certificate 部分找到 App Federation Metadata URL,并将其作为 API7 中的 Identity Provider Metadata URL。

属性映射配置​

Azure AD 默认使用完整 URI 格式的声明名称:

API7 字段SAML 声明名称
usernamehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
emailhttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
namehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

角色映射​

  1. 在 App roles 下创建角色,例如 Admin。
  2. 在 Enterprise applications > Users and groups 下,将角色分配给用户。
  3. 在 Azure 中,进入 Single sign-on > Attributes & Claims,并添加包含已分配角色的声明,例如声明名称 Role。
  4. 在 API7 中使用映射规则:属性 $.Role,操作 Exact Match,值 Admin。

Okta​

IdP 设置​

  1. 在 Okta Admin Console 中,进入 Applications > Applications。
  2. 点击 Create App Integration 并选择 SAML 2.0。
  3. 配置 SAML 设置:
    • Single sign-on URL:使用 API7 中的 ACS URL,例如 https://dashboard.example.com/api/saml/<LOGIN_OPTION_ID>/acs。
    • Audience URI (SP Entity ID):使用 API7 中相同的 Entity ID,例如 https://dashboard.example.com。
    • Name ID format:EmailAddress 或 Unspecified。
  4. 在 Attribute Statements 下配置:
    • 将 username 映射到 user.login。
    • 将 email 映射到 user.email。
    • 将 name 映射到 user.firstName + " " + user.lastName。
  5. 创建应用后,在 Sign On 标签页下找到 Identity Provider metadata URL。
  6. 在 Assignments 标签页下将用户分配给该应用。

属性映射配置​

API7 字段SAML 属性
usernameusername
emailemail
namename

角色映射​

  1. 在 Attribute Statements 下添加 role 属性,例如映射到用户资料属性或组成员关系。
  2. 在 API7 中使用映射规则:属性 $.role,操作 Exact Match,值 admin。

删除登录选项​

注意

删除登录选项会移除与该选项关联的所有控制台用户。

  1. 进入 Organization > Users,确认哪些用户与该登录选项关联。
  2. 进入 Organization > Settings。
  3. 在登录选项上点击 Delete。
备注

必须始终至少保留一个启用状态的登录选项。你不能删除或禁用最后一个仍启用的登录选项。

其他资源​