LDAP 政策

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

内容

LDAP 政策提供以下内容:

  • 身份验证:请求中提供的用户凭据已经过验证 根据 LDAP 提供商中的凭据进行身份验证。LDAP 策略为 身份验证,让您可以使用任何 DN 值和密码,即使该 DN 值 请求的内容例如,假设您需要使用电子邮件地址 / 密码 身份验证。可以使用以下选项: <ph type="x-smartling-placeholder">
      </ph>
    • 如果请求中是电子邮件地址,您只需将其与 LDAP 的密码结合使用即可 身份验证。
    • 如果请求中不包含电子邮件地址,但有另一个 DN 属性(例如电话号码), 您可以使用电话号码从 LDAP 获取相应的电子邮件,然后使用电子邮件地址 / 进行身份验证。
  • 可分辨名称 (DN) 搜索:除了身份验证之外,您还可以 也可使用 LDAP 政策识别请求中的用户属性,例如电子邮件,以及 执行从 LDAP 检索该用户的其他 DN 属性的查询。检索到的 DN 为 都存储在变量中

如果仅限 LDAP 中的用户访问受保护的资源,请使用 LDAP 政策 (例如您的管理员用户、组织用户和开发者),尤其是在 OAuth 令牌访问不必要或过于复杂。该政策还适用于 检索用于 API 代理流的域名元数据。

例如,您可以设置仅在用户成功通过身份验证时才执行 API 调用。 针对 LDAP;之后,您可以视需要检索用户的 DN(域名)属性, 身份验证成功。

如需了解详情,请参阅:

示例

用户名/密码身份验证

<Ldap name="4GLdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <UserName ref="request.header.username"/>
       <Password ref="request.header.password"/>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

此示例提供针对 LDAP 提供商的身份验证。政策传递用户名 从请求发送到 LDAP 以进行身份验证。

DN 属性身份验证

<Ldap name="LdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <Password ref="request.header.password"/>
       <SearchQuery>mail={request.header.mail}</SearchQuery>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

此政策通过请求标头中的电子邮件地址获取用户的 DN,然后 使用请求标头中提供的密码针对 LDAP 对用户进行身份验证。

正在搜索 LDAP

<Ldap name="LdapPolicy">
    <!-- using a custom LDAP provider -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
    <LdapResource>MyLdap</LdapResource>
    <Search>
        <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
        <SearchQuery>mail={request.header.mail}</SearchQuery>
        <Attributes>
            <Attribute>address</Attribute>
            <Attribute>phone</Attribute>
            <Attribute>title</Attribute>
        </Attributes>
        <Scope></Scope> <!-- default is ‘subtree’ -->
    </Search>
</Ldap>

此政策会引用自定义 LDAP 提供方。使用请求中的电子邮件地址 标头以识别用户,然后从中检索用户的地址、电话和职位。 LDAP。检索到的 DN 属性存储在变量中。请参阅“针对特定政策的内容” 。

如要搜索 LDAP 和检索 DN 属性,请求必须包含管理员 凭据。

元素参考

以下是 LDAP 政策元素和属性的说明。

元素

说明

Ldap

包含名称属性的父元素,供您输入政策名称。

LdapConnectorClass

将 LDAP 政策与自定义 LDAP 结合使用时 provider(并非 Apigee 提供),请指定完全限定的 LDAP 连接器类别。 这是您实现 Apigee 的 ExternalLdapConProvider 的类 界面。

LdapResource

输入 LDAP 资源的环境名称。请参阅创建 LDAP 资源

BaseDN

LDAP 的基本级别,您的所有数据都位于该级别。例如,在 Apigee 的 LDAP 提供商,所有数据都位于 dc=apigee,dc=com 下。

  • ref:用于指定包含 BaseDN 值的流变量,例如 apigee.baseDN.ref 优先于显式 BaseDN 值。如果您指定 ref 和 value,则 ref 具有优先级。如果 ref 在 运行时,系统会使用该值。

Scope

  • object:身份验证或搜索仅在 LDAP。
  • onelevel:身份验证或搜索的一级比基准低一级 。
  • subtree(默认):在基本级别进行身份验证或搜索 并且会完全递归地低于基数。

Authentication

Authentication

您实现的身份验证行为的父元素。

UserName

采用以下某个属性的空元素:

  • ref:请求中的用户名引用,例如 request.header.username
  • value:用户名本身

如果您没有使用用户名进行身份验证,或者用户名未包含在 则无需添加此元素。

如果请求中包含用户名,但您希望使用 DN 属性对用户进行身份验证 除用户名(例如 email)外,还应添加 SearchQuery 以获取用户电子邮件地址 密码。LDAP 政策使用用户名查询 LDAP 提供商 然后用于身份验证。

Password

采用以下某个属性的空元素:

  • ref:请求中对密码的引用,例如 request.header.password
  • value:加密密码本身

SearchQuery

如果您想使用用户名以外的 DN 属性(例如 email、email、 配置 LDAP 政策以获取请求中的 DN 属性(例如用户名), 用于识别 LDAP 中的用户、检索电子邮件以及对 用户。

例如,假设 LDAP 定义了一个“mail”属性:

<SearchQuery>mail={request.header.mail}</SearchQuery>

搜索

Search

您实现的搜索行为的父元素。

SearchQuery

通过在请求或响应中使用元数据标识用户,您可以使用 元素从 LDAP 检索用户的其他 DN 属性。例如,如果 请求包含用户电子邮件,且您的 LDAP 为mail 存储用户电子邮件地址,则可以使用以下设置:

<SearchQuery>mail={request.header.mail}</SearchQuery>

此查询会在 LDAP 中搜索与请求中的电子邮件相匹配的电子邮件, 政策现在可以使用 Attributes 元素。

Attributes

使用一个或多个 <Attribute> 元素 确定要为用户检索的 DN 元数据。至少有一个属性是 必填字段。

例如,在 SearchQuery 标识用户后, 政策现在可以检索用户的 DN 属性,例如地址、电话号码和 用户的职位,如以下示例所示。

属性值是 LDAP 中定义的 DN 属性名称。

<Attributes>
  <Attribute>address</Attribute>
  <Attribute>phone</Attribute>
  <Attribute>title</Attribute>
</Attributes>

使用说明

借助适用于私有云的 Apigee Edge,您可以在 API 调用中利用 LDAP 提供商。使用 LDAP 政策,应用可以根据 LDAP 中存储的用户凭据验证凭据,并且您可以 从 LDAP 检索可分辨名称 (DN),也就是与 LDAP 和 例如电子邮件地址、地址和电话号码返回的 DN 存储在 供 API 代理进一步使用

创建 LDAP 资源

LDAP 政策利用您在 Apigee Edge 中创建的 LDAP 资源。一个 LDAP 资源 提供到 LDAP 代码库的连接信息。

如需创建和管理 LDAP 资源,请使用以下 API 和载荷:

API

创建 (POST) 一个 LDAP 资源或列出 (GET) 所有 LDAP 资源:

/v1/organizations/org_name/environments/environment/ldapresources

获取 (GET)、更新 (POST) 和删除 (DELETE) LDAP 资源的详细信息:

/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name

载荷

以下是带有用法注释的示例 XML 载荷。

<LdapResource name="ldap1">
  <Connection>
    <Hosts>
      <!-- port is optional: defaults to 389 for ldap:// and 636 for ldaps:// -->
      <Host port="636">foo.com</Host>
    </Hosts>
    <SSLEnabled>false</SSLEnabled> <!-- optional, defaults to false -->
    <Version>3</Version> <!-- optional, defaults to 3-->
    <Authentication>simple</Authentication> <!-- optional, only simple supported -->
    <ConnectionProvider>jndi|unboundid</ConnectionProvider> <!-- required -->
    <ServerSetType>single|round robin|failover</ServerSetType> <!-- not applicable for jndi -->
    <!-- If using a custom LDAP provider, the fully qualified class: -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
  </Connection>
  <ConnectPool enabled="true"> <!-- enabled is optional, defaults to true -->
    <Timeout>30000</Timeout> <!-- optional, in milliseconds; if not set, no timeout -->
    <Maxsize>50</Maxsize> <!-- optional; if not set, no max connections -->
    <Prefsize>30</Prefsize> <!-- optional; if not set, no pref size -->
    <Initsize></Initsize> <!-- optional; if not set, defaults to 1 -->
    <Protocol></Protocol> <!-- optional; if not set, defaults to 'ssl plain' -->
  </ConnectPool>
  <Admin>
    <DN>cn=manager,dc=apigee,dc=com</DN>
    <Password>secret</Password>
  </Admin>
</LdapResource>

curl 示例:创建 LDAP 资源

以下示例将创建一个名为 ldap1 的 LDAP 资源。

curl -X POST -H "Content-Type: application/xml" \
  https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/ldapresources \
  -u apigee_email:password -d \
  '<LdapResource name="ldap1">
    <Connection>
      <Hosts>
      <Host>foo.com</Host>
      </Hosts>
      <SSLEnabled>false</SSLEnabled>
      <Version>3</Version>
      <Authentication>simple</Authentication>
      <ConnectionProvider>unboundid</ConnectionProvider>
      <ServerSetType>round robin</ServerSetType>
    </Connection>
    <ConnectPool enabled="true">
      <Timeout>30000</Timeout>
      <Maxsize>50</Maxsize>
      <Prefsize>30</Prefsize>
      <Initsize></Initsize>
      <Protocol></Protocol>
    </ConnectPool>
    <Admin>
      <DN>cn=manager,dc=apigee,dc=com</DN>
      <Password>secret</Password>
    </Admin>
  </LdapResource>'

响应代码

以下是政策针对成功或失败返回的 HTML 响应代码:

  • 成功:200
  • 失败:401

在 Edge 中针对私有云使用自定义 LDAP 提供商

使用自定义 LDAP 提供方

适用于私有云的 Apigee Edge 附带一个 LDAP 提供方,该提供方已配置为 LDAP 政策的身份验证。不过,如果您使用的是自定义 LDAP 提供商,则必须启用 提供商以支持 LDAP 政策。具体操作步骤如下:

  1. 在您的 LDAP 提供方类中,实现 ExternalLdapConProvider 接口。
    public interface ExternalLdapConProvider {
      void doAuthentication(LdapBean LlapBean, String userDN, String password, String baseDN);
    
      void doSearchAndAuthentication(LdapBean LlapBean, String password, String baseDN, String query, int scope);
    
      Collection<Map<String, String[]>> doSearch(LdapBean LlapBean, String query,
        String baseDN, Collection<String> requiredAttributes, int scope);
    
      void closeConnections();
    }
  2. 在政策配置的 <LdapConnectorClass> 中(后续部分): 添加自定义 LDAP 提供商的完全限定类名。
  3. 下载此文件:custom-ldap.jar_.zip。 (您可能需要右键点击并选择另存为)。
  4. 解压缩。
  5. 将 custom-ldap.jar 文件添加到环境中,并确保它位于类路径中。
  6. 为您的 LDAP 提供商创建环境资源。您将使用 LDAP 政策的 <LdapResource> 元素中的名称。

使用 Java 版 UnboundID LDAP SDK

您可以将 UnboundID LDAP SDK 与 LDAP 政策搭配使用,但必须先下载版本 2.3.1 并将其添加到每个消息处理器的类路径中。

如需将 UnboundID LDAP SDK 与 LDAP 政策搭配使用,请执行以下操作:

  1. 打开浏览器,然后前往 UnboundID LDAP SDK 对应的 Sourceforge 文件代码库:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. 找到 SDK 2.3.1 版(SE 或 标准版)并下载 ZIP 文件 。例如,下载“unboundid-ldapsdk-2.3.1-se.zip”。
  3. 从 SDK ZIP 文件解压缩 JAR 文件,如以下示例所示:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    此命令仅将 JAR 文件提取到 ~/tmp 目录。删除目录 具有 -j 的结构,但这是可选的。

  4. 在每个消息处理器节点上: <ph type="x-smartling-placeholder">
      </ph>
    1. 将 JAR 文件复制到消息处理器的 /opt/apigee/edge-gateway/lib/thirdparty 目录中。
    2. 如有必要,为 Apigee 用户授予 JAR 文件的权限,以便消息处理器可以访问该文件。
    3. Edge 会添加 /opt/apigee/edge-gateway/lib/thirdparty 目录添加到类路径。

    4. 重启消息处理器:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

流变量

以下是由 SearchQuery 填充的 LDAP 政策变量。

变量

说明

ldap.policyName.execution.success

执行政策后,此数据流变量的值将是“true”“false”或“false” 具体取决于结果。

ldap.policyName.search.result[index].
  attribute.attrName[index]=value

此变量的格式非常灵活, 特定属性:表示多个属性,以及具有多个属性的属性 值。索引是一个从 1 开始的数字。如果未提供索引编号,则使用默认值 索引编号为 1。

如果政策返回地址、电话号码和电子邮件地址,您可以检索第一个属性 和值:

ldap.policyName.search.result.attribute.address
ldap.policyName.search.result.attribute.phone
ldap.policyName.search.result.attribute.email

如果您想在搜索结果中检索第三个地址属性, 则应该使用以下代码:

ldap.policyName.search.result[3].attribute.address

如果某个属性具有多个值(例如,如果用户有多个电子邮件地址 地址),则可以从结果中检索第二个电子邮件地址,如下所示:

ldap.policyName.search.result.attribute.mail[2]

错误代码

Edge 政策返回的错误采用一致的格式,如错误代码参考文档中所述。

此政策使用以下错误代码:

错误代码 讯息
InvalidAttributeName Invalid attribute name {0}.
InvalidSearchBase Search base can not be empty.
InvalidValueForPassword Invalid value for password field. It can not be empty.
InvalidSearchScope Invalid scope {0}. Allowed scopes are {1}.
InvalidUserCredentials Invalid user credentials.
InvalidExternalLdapReference Invalid external ldap reference {0}.
LdapResourceNotFound Ldap resource {0} not found.
BaseDNRequired Base DN required.
OnlyReferenceOrValueIsAllowed Only value or reference is allowed for {0}.
AttributesRequired At least one attribute required for search action.
UserNameIsNull User name is null.
SearchQueryAndUserNameCannotBePresent Both search query and username can not be present in the authentication action. Please specify either one of them.