使用 CLI 来创建特定于组织的 LDAP 用户注册表
您可以使用 开发者工具箱 CLI 来配置特定于组织的 LDAP 用户注册表,以便为 开发者门户网站提供用户认证。 还可以通过 LDAP 用户注册表来保护 API。
在开始之前
要将 LDAP 用户注册表配置为 API Manager中的资源,必须创建 LDAP 目录并将其用于 API Connect 生态系统。
LDAP 注册表可用于保护 API ,或者用于保护目录以认证 Developer Portal 用户。
Active Directory,那么必须使用 LDAP 配置中的属性 "directory_type": "ad" 来指示此情况。您需要具有以下某个角色才能配置 LDAP 用户注册表:
- 管理员
- 所有者
- 拓扑管理员
- 定制角色Settings: Manage许可权
关于此任务
本主题描述了如何配置特定于组织的 LDAP 用户注册表。 特定于组织的 LDAP 用户注册表可用于在特定提供者组织中启用和认证 Developer Portal 用户。
- 您还可以使用 API Manager UI 创建特定于组织的 LDAP 用户注册表; 有关更多信息,请参阅 在 API Manager 中创建 LDAP 用户注册表。
- 此外,您可以使用 API Connect REST API 来创建和管理 LDAP 用户注册表; 请参阅 API Connect REST API 文档。
- 如果您正在使用 DataPower® API Gateway,那么不支持 LDAP 组认证。
- 您可以使用 开发者工具箱 CLI 将外部 LDAP 组映射到 API Connect 用户角色以启用对用户授权的更多控制。 以下指示信息说明如何在 LDAP 用户注册表资源上设置
external_group_mapping_enabled配置。 有关如何在 API Connect 用户角色上设置外部角色映射的信息,请参阅 在 Cloud Manager 用户角色上配置 LDAP 组映射。
通过以下方式创建 LDAP 用户注册表:首先在配置文件中定义注册表详细信息。 然后,使用 developer toolkit CLI 命令来创建注册表,并将配置文件作为参数传递。 要使注册表可供 Developer Portal使用,必须在关联的目录中启用注册表。 要使用 LDAP 注册表保护 API,必须配置安全性定义。 您可以使用以下指示信息来创建可写或只读的 LDAP 用户注册表。
有关使用 LDAP 进行认证的常规信息,请参阅 LDAP 认证。
登录到管理服务器 CLI
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_host_name --fields title,realm例如apic identity-providers:list --scope provider --server platform_api_host_name --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。有关登录命令的完整详细信息,请参阅 登录到管理服务器。
定义 LDAP 配置
ldap_config_file.yaml 文件中定义 LDAP 用户注册表的配置,如以下示例中所示。 请注意,YAML 文件的实际内容将根据 LDAP 服务器的认证方法而不同,并在下表中进行阐述。name: registry_name
title: "display_title"
integration_url: LDAP_integration_url
user_managed: true_or_false
user_registry_managed: false
directory_type: ad
external_group_mapping_enabled: true_or_false
case_sensitive: true_or_false
email_required: true_or_false
email_unique_if_exist: true_or_false
identity_providers:
- name: provider_name
title: provider_title
endpoint:
endpoint: "ldap_server_url_and_port"
configuration:
authentication_method: authentication_method
authenticated_bind: "true_or_false"
admin_dn: "admin_dn"
admin_password: admin_password
search_dn_base: "search_dn_base"
search_dn_scope: search_dn_scope
search_dn_filter_prefix: prefix
search_dn_filter_suffix: suffix
attribute_mapping:
dn: "distinguished_name"
cn: "common_name"
sn: "last_name"
mail: "email_address"
userPassword: "password"下表中描述了对于每种认证方法通用的注册表属性:| 属性 | 描述 |
|---|---|
name |
注册表的名称。 在 CLI 命令中使用此名称。 |
title |
要在图形用户界面中显示的描述性名称。 |
integration_url |
LDAP集成 URL 在您的 API Connect 配置中。 您可以使用以下 CLI 命令确定 LDAP 集成 URL: |
user_managed |
确定用户注册表是否可写。 对于可写 LDAP,必须设置为 true。 如果您不希望注册表可写,那么可以将此设置更改为 false ; 请参阅本主题末尾的 在可写和只读之间切换 LDAP 注册表 部分以获取详细信息。 请注意,可写 LDAP 用户注册表不能用于认证 Cloud Manager 和 API Manager 用户。 |
user_registry_managed |
对于 LDAP,必须设置为 false。 确定 API Connect 是否管理用户注册表。 只有 LUR 注册表由 API Connect管理。 |
directory |
为目录类型指定下列其中一个值:
|
external_group_mapping_enabled |
确定用户注册表是否支持 LDAP 组映射。 有效值为:
false。 |
case_sensitive |
确定用户注册表是否区分大小写。 有效值为:
注: 在至少有一个用户已加入注册表后,无法更改此设置。
|
email_required |
确定在用户加入过程中是否需要电子邮件地址。 有效值为:
true,那么在加载期间,源身份提供者必须在认证过程中提供电子邮件地址。注: 缺省情况下,加载到 Cloud Manager 或 API Manager时不需要电子邮件地址,但加载到 Developer Portal时需要电子邮件地址。
|
email_unique_if_exist |
确定电子邮件地址在用户注册表中是否必须唯一。 有效值为:
注: Developer Portal中的每个帐户 (包括同一站点的不同用户注册表) 都必须具有唯一的电子邮件地址,包括站点管理员帐户。
|
identity_providers |
包含 LDAP 服务器详细信息的数组,其中:
|
endpoint |
LDAP 服务器的端点,由 URL 和端口组成,例如: |
tls_profile |
(可选)设置 LDAP 服务器所需的 TLS 客户机概要文件。 |
protocol_version |
(可选)设置要使用的 LDAP 协议的版本号。 有效值为:
3。 |
compose_dn- 如果可以通过用户名来组成用户 LDAP 专有名称 (DN),请设置此格式。 例如,uid=<username>,ou=People,dc=company,dc=com是一种 DN 格式,可以由用户名组成。 如果不确定“组成 (DN)”是否为正确选项,请联系 LDAP 管理员。 如果您是使用 LDAP 注册表来保护 API,那么 DataPower API Gateway 不支持compose_dn。compose_upn- 如果 LDAP 目录支持与用户主体名称(例如john@acme.com)进行绑定,请设置此格式。 Microsoft Active Directory 是支持组成 UPN 认证的 LDAP 目录的示例。 如果不确定 LDAP 目录是否支持与 UPN 绑定,请联系 LDAP 管理员。注: 管理绑定 DN 和管理绑定密码不与此认证方法配合使用。search_dn- 如果不能通过用户名来组成用户 LDAP 专有名称,请选择此格式;例如,如果用户的基本 DN 不同。 此格式可能需要管理员 DN 和密码才能搜索 LDAP 目录中的用户。 如果 LDAP 目录允许匿名绑定,那么可省略管理员 DN 和密码。 如果不确定 LDAP 目录是否允许匿名绑定,请联系 LDAP 管理员。
compose_dn,请设置以下配置属性:| 属性 | 描述 |
|---|---|
authentication_method |
compose_dn |
authenticated_bind |
绑定方法。 有效值为:
"false"。 如果需要特定许可权,请选择 "true"。 |
admin_dn |
如果 authenticated_bind 设置为 "true",请输入有权在 LDAP 目录中执行搜索的用户的专有名称 (DN)。 例如:
|
admin_password |
如果 authenticated_bind 设置为 "true",请输入 admin_dn 的用户密码。 |
search_dn_base |
(可选)设置基本 DN,例如: |
bind_prefix |
设置 DN 的前缀,例如: |
bind_suffix |
设置 DN 的后缀,例如: |
attribute_mapping |
如果 user_managed 设置为 true,请提供源 LDAP 属性名称到目标 API Connect 值的映射。 此映射配置为名称/值对,如下指定:其中:
username, first_name, last_name, email和 password。截取的以下代码显示了属性映射的示例:
|
compose_upn,请设置以下配置属性:| 属性 | 描述 |
|---|---|
authentication_method |
compose_upn |
authenticated_bind |
绑定方法。 有效值为:
"false"。 如果需要特定许可权,请选择 "true"。 |
admin_dn |
如果 authenticated_bind 设置为 "true",请输入有权在 LDAP 目录中执行搜索的用户的专有名称 (DN)。 例如:
|
admin_password |
如果 authenticated_bind 设置为 "true",请输入 admin_dn 的用户密码。 |
bind_suffix |
输入用户主体名称的域部分。 例如: |
attribute_mapping |
如果 user_managed 设置为 true,请提供源 LDAP 属性名称到目标 API Connect 值的映射。 此映射配置为名称/值对,如下指定:其中:
username, first_name, last_name, email和 password。截取的以下代码显示了属性映射的示例:
|
search_dn,请设置以下配置属性:| 属性 | 描述 |
|---|---|
authentication_method |
search_dn |
authenticated_bind |
绑定方法。 有效值为:
"false"。 如果需要特定许可权,请选择 "true"。 |
admin_dn |
如果 authenticated_bind 设置为 "true",请输入有权在 LDAP 目录中执行搜索的用户的专有名称 (DN)。 例如:
|
admin_password |
如果 authenticated_bind 设置为 "true",请输入 admin_dn 的用户密码。 |
search_dn_base |
(可选)设置基本 DN,例如: |
search_dn_scope |
(可选)设置搜索 DN 作用域。 作用域确定检查目录信息树的哪个部分。 可能的值为:
|
search_dn_filter_prefix |
设置 DN 的前缀,例如: |
search_dn_filter_suffix |
设置 DN 的后缀,例如: |
attribute_mapping |
如果 user_managed 设置为 true,请提供源 LDAP 属性名称到目标 API Connect 值的映射。 此映射配置为名称/值对,如下指定:其中:
username, first_name, last_name, email和 password。截取的以下代码显示了属性映射的示例:
|
保存 ldap_config_file.yaml,以便可通过以下部分中的 user-registries:create 命令进行访问。 请参阅 示例 部分以获取示例配置文件。
创建 LDAP 用户注册表
apic user-registries:create --server mgmt_endpoint_url --org organization_name ldap_config_file.yaml其中:- mgmt_endpoint_url 是平台 API 端点 URL。
- organization_name 是提供者组织的
name属性值。 - ldap_config_file 是用于定义 LDAP 用户注册表配置的 YAML 文件的名称。
registry_name registry_urlregistry_name 派生自配置 YAML 文件中的 name 属性。 registry_url 是可用于访问注册表资源的 URL。现在已创建 LDAP 用户注册表; 请参阅以下部分以获取有关如何使注册表在 Developer Portal中可用的指示信息。
在目录中配置 LDAP 注册表
在可写和只读之间切换 LDAP 注册表
user_managed 属性在可写和只读之间切换注册表。 请完成下列步骤。- 通过运行以下命令(或者可以使用注册表创建中的摘要),确定要更新的 LDAP 用户注册表的名称或标识:
该命令返回该组织的所有用户注册表的列表,按后跟其注册表 URL 的名称显示。 注册表标识位于 URL 的末尾,例如,apic user-registries:list --server mgmt_endpoint_url --org organization_namehttps://company.com/api/user-registries/x-x-x-x-x/registry_id。 - 请输入以下命令(终止连字符表示此命令从命令行接受输入):
其中,apic user-registries:update --server mgmt_endpoint_url --org organization_name registry_name_or_id -registry_name_or_id是想要更新的 LDAP 用户注册表的名称或标识(如先前步骤中所确定)。 该命令返回:Reading USER_REGISTRY_FILE arg from stdin - 输入以下数据,后接新的一行:
其中,user_managed: true_or_falsetrue使注册表变为可写,false使注册表变为只读。 - 按
CTRL D以终止输入。
attribute_mapping 配置,如先前注册表属性表中所述。使用 LDAP 用户注册表来保护 API
- 要在 API 的安全性定义中用于基本认证,请参阅 创建基本认证安全性定义。
- 要在本机 OAuth 提供者的 用户安全性 配置中用于认证,请参阅 为本机 OAuth 提供者配置用户安全性。
有关所有apic user-registries和apic
configured-catalog-user-registries命令,请参见工具包 CLI 参考文档。
示例
name: sdn-ldap
title: "SDN LDAP User Registry"
integration_url: https://mycompany.com/api/cloud/integrations/user-registry/xxx-xxx-xxx
user_managed: true
user_registry_managed: false
directory_type: standard
case_sensitive: false
identity_providers:
- name: ldap
title: "SDN LDAP Identity Provider"
endpoint:
endpoint: "ldap://mycompany.com:389"
configuration:
authentication_method: search_dn
authenticated_bind: "true"
admin_dn: "cn=admin,dc=company,dc=com"
admin_password: xxxx
search_dn_base: "dc=company,dc=com"
search_dn_scope: sub
search_dn_filter_prefix: (uid=
search_dn_filter_suffix: )
attribute_mapping:
dn: "uid=[username],ou=users,dc=company,dc=com"
cn: "[first_name] [last_name]"
sn: "[last_name]"
mail: "[email]"
userPassword: "[password]"