在 API Manager 中创建 OIDC 用户注册表
当需要多因素身份验证(MFA)时,请创建一个针对该组织的 OIDC 用户注册表。
API Connect 提供了两种方法来在 API Designer中创建 OIDC 用户注册表,如以下部分中所述:
使用 UI 以创建 OIDC 用户注册表
当需要多因素身份验证(MFA)时,请使用 API Designer 用户界面创建一个针对特定组织的 OIDC 用户注册表。
- 在 API 设计器的导航页面中, 单击
“资源”。 - 单击 用户注册表。
- 单击 创建 ,然后选择 OIDC 用户注册表。重要提示: 当启用了自助入职功能,或预计任何站点将删除账户时,请勿在 API 管理器与用户目录之间,或在用户目录的不同站点之间共享用户注册信息。 您应该为它们分别创建用户注册表,即使这些独立的注册表指向同一个后端身份验证提供商(例如, LDAP 服务器)。 这种分离使得 “消费者目录 ”能够在整个目录中保持电子邮件地址的唯一性, 而“API 管理器 ”则无需满足这一要求。 此外,这还能避免用户从“消费者目录 ”中删除账户后,导致其 API 管理器访问权限受影响的问题。
- 在“创建 OIDC 用户注册表”页面上,使用以下每个部分中的字段来配置注册表设置,然后单击创建。
许多注册表设置都已预配置,以简化配置步骤。
- 提供程序类型
- 使用表 1 中的设置来定义提供者类型。
表 1. 提供商类型设置 字段 描述 提供程序类型 OIDC 提供程序。 选择以下受支持的 OIDC 提供程序之一: - 脸书
- GitHub
- Slack
- X(原名Twitter)
- Windows™ Live
- 标准 OIDC(缺省值允许您指定其他提供者)
标题 提供用于显示的描述性名称。 名称 自动生成。 此名称在 CLI 命令中用于引用注册表。 有关管理用户注册表的 CLI 命令的详细信息,请参阅工具包 CLI 参考文档。 目录 提供新注册表的简要描述。 需要电子邮件 如果用户注册流程中需要填写电子邮件地址,请选择此选项。 如果选择了此选项,那么源身份提供者必须在加载期间提供电子邮件地址作为认证过程的一部分。 注意: 默认情况下,注册 Cloud Manager 或 Consumer Catalog 时无需提供电子邮件地址。唯一电子邮件地址 如果电子邮件地址在用户注册表中必须是唯一的,请选择此选项。 注意: 消费者目录中的每个账户(包括同一站点下不同用户注册表中的账户)都必须拥有一个唯一的电子邮件地址,站点管理员账户也不例外。 - 提供商端点
- 针对大多数受支持的提供者自动生成。 在授权端点字段中,输入提供者的授权端点的 URL。
- 令牌端点
- 按表 2 中所述填写设置。
表 2. 令牌端点设置 字段 描述 URL 针对大多数受支持的 OIDC 提供程序进行了预配置。 输入提供者的令牌端点的 URL。 TLS 选择令牌端点的 TLS 客户机概要文件(OIDC 必须配置为使用 TLS)。 缺省值为缺省 TLS 客户机概要文件。 - 用户信息端点
- 按表 3 中所述填写设置。
表 3. UserInfo 终端设置 字段 描述 URL 针对大多数受支持的 OIDC 提供程序进行了预配置。 输入提供者的用户信息端点的 URL。 对于 LinkedIn, 端点已更改,现在使用以下值:
如果先前使用旧的 LinkedIn OIDC 协议配置了 OIDC 注册表,那么无需指定此端点。https://api.linkedin.com/v2/meTLS 选择用户信息端点的 TLS 客户机概要文件(OIDC 必须配置为使用 TLS)。 缺省值为缺省 TLS 客户机概要文件。 - 电子邮件端点
- 对于旧的 LinkedIn OIDC 协议是必需的。
由于 LinkedIn, API Connect 中 OIDC 注册表的配置设置也发生了更改。 如果要为 LinkedIn, 可以将电子邮件端点字段留空。
如果先前配置了 OIDC 注册表以用于旧的 LinkedIn OIDC 协议,请通过提供电子邮件端点设置来更新配置,如表中所述 4。 旧 LinkedIn OIDC 协议需要新设置。
表 4. 电子邮件端点设置 字段 描述 URL 对于旧的 LinkedIn OIDC 协议,此字段缺省为以下值:
您可以通过输入新值来覆盖设置。https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))TLS 选择用户信息端点的 TLS 客户机概要文件(OIDC 必须配置为使用 TLS)。 缺省值为缺省 TLS 客户机概要文件。 - JWKS 端点
- 按表 5 中所述填写设置。
表 5. JWKS 端点设置 字段 描述 URL 输入包含 JWKS 格式的公用密钥信息的只读端点的 URL。 TLS 选择用户信息端点的 TLS 客户机概要文件(OIDC 必须配置为使用 TLS)。 缺省值为缺省 TLS 客户机概要文件。 - 注销
- 您可以配置以下任一种注销支持类型,但不能同时配置两种:
- 注销重定向:
允许您指定用户注销后所看到的页面 API Connect;例如,您可以将用户“重定向”至 OIDC 提供商的注销端点,或另一个地址。 当用户从 注销时,浏览器将被重定向至指定的 URLAPI Connect,以便由指定的 URL 进行后续处理。
- 由RP发起的注销:
根据 OpenID 《Connect RP发起注销》 1.0 配置文件,提供更安全的表单。 当用户退出 API Connect登录时, API Connect 系统会向指定的端点 URL 发送一个 POST 请求,以清除该用户的会话。 使用此选项时,您还可以选择提供一个 RP 注销重定向端点 URL。
按表 6 中所述填写设置。
表 6. 注销选项 字段 描述 注销重定向 URL 可选。 提供一个 URL ,以便在用户退出登录时将浏览器重定向至该页面 API Connect。 如果使用此选项,请勿启用 OIDC 资源提供方(RP)注销功能。
启用 OIDC RP 注销 选择此选项以使用由 RP 发起的注销,而非传统的注销重定向。 如果使用此选项,请勿提供注销重定向链接 URL。 在由 RP 发起的注销过程中,您可以选择指定 RP 注销重定向地址 URL。
RP 将发出 POST 请求的 URL 端点 请向将执行 POST 请求的端点提供 URL;例如, OpenID 提供商的授权端点。 TLS 在向 OpenID 提供商端点发送 POST 请求时,请选择要使用的“ TLS ”配置文件。 RP 注销重定向端点 URL 可选。 提供一个 URL ,以便 OIDC 提供商在注销操作后将用户重定向至该地址。 URL 的功能如 post_logout_redirect_uri《 OpenID Connect RP-Initiated Logout 1.0 Profile 》中所述。在注销时包含 refresh_token 可选。 根据 OpenID Connect RP-Initiated Logout 1.0 Profile 的规定,除 id_token_hint 之外,还应包含 refresh_token。 - 注销重定向:
- 客户信息
- 按表 7 中所述填写设置。
表 7. “客户端信息”设置 字段 描述 客户机标识 提供向所选 OIDC 提供程序注册的应用程序的客户机标识。 客户机私钥 提供向所选 OIDC 提供程序注册的应用程序的客户机密钥。 当您创建类型为 Standard 的 OIDC 目录并将 客户机认证方法 设置为 数据编码表单主体时,此字段是可选的。 如果您未使用客户端密钥 ,请确保已在 OIDC 提供商处配置了双向身份验证( TLS )。 要启用双向 TLS , 请创建一个 TLS 配置文件 ,并将其纳入 OIDC用户注册表的配置中。
响应类型 针对大多数受支持的 OIDC 提供程序进行了预配置。 指定将从 OIDC 提供程序接收的响应的数据类型。 范围 针对大多数受支持的 OIDC 提供程序进行了预配置。 指定 OIDC 提供程序的访问作用域。 客户机认证方法 针对大多数受支持的 OIDC 提供程序进行了预配置。 选择要用于 OIDC 提供程序的认证方法。 选项为: - HTTP 基本认证模式
- 数据编码表单主体
- 其他支持
- 可选。 选择表 8 中描述的其他安全参数。
表 8. 其他安全选项 安全参数 设置 CLI 的名称 描述 NONCE nonce启用 NONCE 扩展以防止再次使用无法满足的请求(已重放)。 代码交换证明密钥 (PKCE) pkce启用 PKCE 扩展以支持公共客户机缓解授权代码遭拦截的威胁。 - 高级功能
- 可选。 选择表 9 中描述的高级功能。
表 9。 高级功能 功能部件/UI 标签 设置 CLI 的名称 描述 自动加载 auto_onboard允许用户在不先登录的情况下执行对 API 的调用,前提是其提供由 OIDC 提供程序发放的有效令牌。 注: 不适用于使用者组织。始终使用用户信息端点 userinfo将 OIDC 用户注册表配置为始终从用户信息端点访存用户数据(如果已填充)。 将门户网站用作外部 OIDC 提供程序流量的端点 proxy_redirect在验证用户身份时,请将外部 OIDC 提供商重定向至 Consumer Catalog 进行通信,而非 API Manager。 启用此功能后, 消费者目录的重定向 URI 应设置为 /ibm_apim/oidcredirect.。有关详细信息,请参阅 “重定向 URI ”。返回第三方访问令牌 proxy_access_token在响应中包含第三方 OIDC 访问令牌。 注: 启用此设置仅用于调试目的。建议不要在生产环境中使用此设置。 启用此设置后,当使用该令牌向 API Connect 发送请求时,令牌大小将会增加。 较大的令牌大小可能会超出 HTTP 协议的限制,从而导致 ERR_HTTP2_PROTOCOL_ERROR 或ERR_CONNECTION_CLOSED错误。
您可以通过额外启用 “返回第三方 access_token 和 id_token 作为独立声明 ”来避免大小限制问题,这样第三方令牌就不会 API Connect被添加到所签发的 access_token 中。
返回第三方 id_token proxy_id_token在响应中包含第三方 OIDC id_token。 注: 启用此设置仅用于调试目的。建议不要在生产环境中使用此设置。 启用此设置后,当使用该令牌向 API Connect 发送请求时,令牌大小将会增加。 较大的令牌大小可能会超出 HTTP 协议的限制,从而导致 ERR_HTTP2_PROTOCOL_ERROR 或ERR_CONNECTION_CLOSED错误。
您可以通过额外启用 “返回第三方 access_token 和 id_token 作为独立声明 ”来避免大小限制问题,这样第三方令牌就不会 API Connect被添加到所签发的 access_token 中。
将第三方 access_token 和 id_token 作为独立的声明返回 proxied_token_as_separate_claim请将第三方 OIDC 令牌(和 proxy_id_tokenproxy_access_token)作为独立的声明包含在响应中,而不是将其添加到由 签发的 API Connectaccess_token 中。 要使用此功能,您必须启用 “返回第三方访问令牌 ”和 “返回第三方 id_token ”选项中的至少一个。将第三方令牌分离出来,可以防止它们影响由 API Connect. 签发的 access_token 的大小。
令牌中继 token_relay允许 access_token/refresh_token在用于注销的 302 重定向中发送用户信息 POST post_userinfo如果 OIDC 提供程序支持,请在联系用户信息端点时使用 HTTP POST 方法。 注: 并非所有 OIDC 提供者都支持 POST。 启用此功能之前,请确保 OIDC 提供程序支持此功能。在云端使用 IBM® 的 APIC 令牌过期设置 override_provider_ttl使用 API Connect中配置的访问令牌和刷新令牌到期设置来覆盖 OIDC 提供者的令牌到期设置。 有关在 API Connect中配置访问令牌和刷新令牌到期设置的信息,请参阅 配置访问令牌和刷新令牌的超时。 禁用散列验证 (仅限 CLI) disable_hash_verification禁用 at_hash和c_hash - 用户映射
- 按表 10 中所述填写设置。注: 为大多数受支持的 OIDC 提供者预先配置了 "用户映射" 字段,以最大限度减少潜在错误; 请在更改设置时小心谨慎。 对于标准 OIDC 选项,请联系 OIDC 提供程序以获取字段的详细信息。
表 10. 用户映射设置 字段 描述 用户名 响应令牌中包含用户的用户名的字段名称。 注: 用户名 字段对于此 OIDC 注册表必须唯一,因为它标识系统中的用户并且无法更改。电子邮件 响应令牌中包含用户电子邮件地址的字段名称。 名字 响应令牌中包含用户名字的字段名称。 姓氏 响应令牌中包含用户姓氏的字段名称。
- 重定向 URI
- 重定向 URI 部分列示 OIDC 授权服务器将授权代码重定向至的端点。 每个 API Connect 组织类型都有一个端点: 云管理,提供者组织和使用者组织。 用户向
OIDC 提供程序注册其应用程序时,需要重定向端点。 例如,如果此 OIDC 用户注册表由提供者组织使用,那么客户必须向 OIDC 提供程序注册该提供者组织的重定向端点。 系统根据需要提供只读字段以供您复制端点值。注意: 如果消费者目录对公众开放,且您选择了该
proxy_redirect选项,则必须将您的 OIDC 提供商配置为使用以下重定向 URI:- URI 路径:
/ibm_apim/oidcredirect - 完整的 URL 示例:
https://<your-developer-portal-domain>/ibm_apim/oidcredirect
此配置可确保 OIDC 提供商在登录流程中,能够将经过身份验证的用户正确重定向回消费者目录。<your-developer-portal-domain>是您面向公众的消费者目录的实际主机名;例如,developer.example.com。 - URI 路径:
启用 OIDC 用户注册表
请按照以下步骤操作,为 “消费者目录 ”中的特定目录启用新用户注册表。 请对将使用新注册表的每个目录重复此过程。
- 在导航窗格中,单击
“管理 ”。 - 选择要为其启用新 OIDC 用户注册表的目录。
- 在导航窗格上,单击 目录设置 选项卡。
- 在 " 设置 " 页面上,单击 加入。
- 在 " 加载 " 页面上,单击 目录用户注册表 部分中的 编辑 。
- 在“编辑用户注册表”页面上,选择要为目录启用的新 OIDC 用户注册表。
- 单击保存。
使用 CLI 以创建 OIDC 用户注册表
当需要多因子认证 (MFA) 时,请使用 developer toolkit CLI 来创建特定于组织的 OIDC 用户注册表。
- 不能使用 OIDC 注册表来保护网关上的 API。
- 如果您使用OIDC用户注册表登录,管理服务器将处理与第三方OIDC提供商的交互。 从第三方OIDC提供商的角度来看,管理服务器被视为应用程序。 因此,第三方授权服务器用于发送令牌的管理服务器上的OIDC重定向端点必须对OIDC提供商开放。 如果API Connect 环境位于防火墙后,为确保登录功能,您必须允许访问。 在API管理器和云管理器上登录用户时,情况也是如此。
- 如果使用 OIDC 用户注册表在消费者目录中进行用户登录,且消费者目录位于 DMZ 中,您可以使用该
proxy_redirect属性。 这使得消费者目录能够充当代理端点,用于在 OIDC 提供商与 API Connect. 之间进行通信。 - 当您向第三方 OIDC 提供商注册应用程序时,您需要提供相应的 OIDC 重定向 URI,例如 https://consumer.mycompany.com/consumer-api/oauth2/redirect。 但是,在您创建 API Connect 中的OIDC用户注册信息之前,您无法访问这些信息。 首先,请按照本页说明中的详细步骤,在没有这些信息的情况下注册您的申请,然后再进行更新。
登录管理服务器
apic login --server mgmt_endpoint_url --username user_id --password password --realm provider/identity_provider--realm 参数中使用的身份提供者:apic identity-providers:list --scope provider --server platform_api_endpoint_url --fields title,realm例如,apic identity-providers:list --scope provider --server platform_api_endpoint_url --fields title,realm
total_results: 2
results:
- title: API Manager User Registry
realm: provider/default-idp-2
- title: Corporate LDAP user registry
realm: provider/corporate-ldap您可通过 title 值确定要使用的身份提供者;然后,可以直接从显示的 realm 值复制对应的 --realm 参数。 对于管理员在 API Connect 安装后创建的任何身份提供商,其名称均在创建时确定。 用于以提供者组织成员身份登录的缺省 API Manager 本地用户注册表为 default-idp-2。有关 apic login 命令的完整详细信息,请参阅 登录到管理服务器。
定义 OIDC 注册表配置
title: registry_title
integration_url: oidc_integration_url
case_sensitive: case_sensitivity_setting
email_required: true_or_false
email_unique_if_exist: true_or_false
configuration:
client_id: 'app_client_id'
client_secret: 'my-client-secret'
provider_type: oidc_provider_type其中:- registry_title 是您为用户注册表选择的描述性标题。
- oidc_integration_url 是 API Connect 配置中的 OIDC 集成 URL。 您可以使用以下 CLI 命令确定 OIDC 集成 URL:
apic integrations:list --server mgmt_endpoint_url --subcollection user-registry - case_sensitivity_setting 确定用户注册表是否区分大小写。 有效值为:
truefalse
- 仅当后端 OIDC 提供商支持
true区分大小写时,才将其设置case_sensitive为。 - 如果后端 OIDC 提供程序不支持区分大小写,请将
case_sensitive设置为false。
注意: 在注册表中添加至少一名用户后,您将无法更改此设置。 - email_required 确定在用户加入过程中是否需要电子邮件地址。 有效值为:
truefalse
true,那么在加载期间,源身份提供者必须在认证过程中提供电子邮件地址。注意: 默认情况下,注册 Cloud Manager 或 API Manager 时无需提供电子邮件地址,但注册 Consumer Catalog 时必须提供。 - email_unique_if_exist 确定电子邮件地址在用户注册表中是否必须唯一。 有效值为:
truefalse
注意: 消费者目录中的每个账户(包括同一站点下不同用户注册表中的账户)都必须拥有一个唯一的电子邮件地址,站点管理员账户也不例外。 - app_client_id 是向 OIDC 服务器注册的应用程序的客户机标识,必须为字符串格式。
- my-client-secret 是向 OIDC 服务器注册的应用程序的客户机密钥,必须为字符串格式。
- oidc_provider_type 是 OIDC 提供程序的类型;请指定下列其中一个值:
facebookgithubgooglelinkedinslacktwitterwindows_livestandard注:- 如果 OIDC 提供者为 X (以前称为 Twitter) ,请使用
twitter提供者类型。 - 对任何符合 OIDC 标准的 OIDC 提供程序使用
standard提供者类型。如果提供者类型为standard,那么必须在 YAML 文件的configuration部分中包含以下附加属性:
其中:authorization_endpoint: 'oidc_auth_endpoint' token_endpoint: endpoint: 'oidc_token_endpoint'- oidc_auth_endpoint 是 OIDC 服务器上的授权端点,必须为字符串格式。
- oidc_token_endpoint 是 OIDC 服务器上的令牌端点,必须为字符串格式。
- 如果 OIDC 提供者为 X (以前称为 Twitter) ,请使用
缺省 OIDC 配置
对于每种 OIDC 提供者类型, API Connect 都采用缺省配置,但您可以覆盖 YAML 文件中的缺省配置属性。
API Connect 尽最大努力更新已知 OIDC 用户注册表类型的端点。 但是, OIDC 提供者可以随时更改端点。 客户负责确认 API Connect 提供的端点受 OIDC 提供者支持,并根据需要更新 OIDC 配置。
缺省配置如下:
创建 OIDC 用户注册表
apic user-registries:create --server mgmt_endpoint_url --org organization_name oidc_config_file其中:- mgmt_endpoint_url 是平台 API 端点 URL。
- organization_name 是提供者组织的
name属性值。 - oidc_config_file 是用于定义 OIDC 用户注册表配置的 YAML 文件的名称。
registry_name registry_url缺省情况下,registry_name 派生自配置 YAML 文件中的 title 属性,但可通过在该文件中包含 name 属性来进行覆盖。 registry_url 是 API Connect 分配给注册表的内部 URL。apic user-registries:get --server mgmt_endpoint_url --org organization_name registry_name --output -所需的 oidc_redirect_uri 值在 consumer: 部分中;例如:consumer:
oidc_redirect_uri: https://consumer.mycompany.com/consumer-api/oauth2/redirect在目录中启用 OIDC 注册表
有关所有 和 apic
configured-catalog-user-registries apic user-registries 命令的详细信息,请参阅工具包 CLI 参考文档。
您也可以通过 REST API Connect API 完成本主题中所述的操作;请参阅 REST API API Connect 文档。