Política LDAP

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

O que

A política LDAP fornece:

  • Autenticação: as credenciais do usuário informadas na solicitação são validadas. com as credenciais no provedor LDAP. A política LDAP oferece muita flexibilidade com que permite usar qualquer valor de DN com a senha, mesmo que esse valor de DN que você quer não está na solicitação. Por exemplo, digamos que você precise usar e-mail / senha para autenticação. As seguintes opções são possíveis:
    • Se o e-mail estiver na solicitação, basta usá-lo com a senha para LDAP autenticação.
    • Se o e-mail não estiver na solicitação, mas houver outro atributo DN (como número de telefone), você pode usar o número de telefone para obter o e-mail correspondente do LDAP e, em seguida, usar e-mail / senha para autenticação.
  • Pesquisa de nome distinto (DN): além da autenticação, é possível também usará a política LDAP para identificar um atributo do usuário na solicitação, como e-mail, e executar uma consulta que recupere outros atributos DN do LDAP para esse usuário. O DN recuperado é armazenada em uma variável.

Use a política LDAP quando o acesso a recursos protegidos for limitado aos usuários no LDAP como usuários administradores, usuários da organização e desenvolvedores, especialmente quando O acesso ao token OAuth é desnecessário ou muito pesado. A política também foi criada para Recuperar metadados de nome de domínio para uso em fluxos de proxy de API.

Por exemplo, uma chamada de API pode ser executada somente quando um usuário é autenticado com sucesso em relação ao LDAP. e, em seguida, recupere, opcionalmente, os atributos DN (nome de domínio) para o usuário após é bem-sucedida.

Para mais informações, consulte:

Amostras

Autenticação por nome de usuário/senha

<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>

Este exemplo fornece autenticação em um provedor LDAP. A política passa o nome de usuário e a senha da solicitação ao LDAP para autenticação.

Autenticação de atributo de 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>

Essa política busca o DN do usuário com o e-mail no cabeçalho da solicitação e, em seguida, autentica o usuário no LDAP com a senha fornecida no cabeçalho da solicitação.

Pesquisando 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>

Esta política faz referência a um provedor LDAP personalizado. Ela usa o endereço de e-mail na solicitação cabeçalho para identificar o usuário e recupera o endereço, telefone e cargo do usuário no LDAP. Os atributos DN recuperados são armazenados em uma variável. Consulte "Específico para políticas variáveis".

Para pesquisar LDAP e recuperar atributos de DN, a solicitação deve incluir registros credenciais.

Referência de elemento

Veja a seguir as descrições dos elementos e atributos da política LDAP.

Elemento

Descrição

Ldap

Elemento pai com um atributo de nome para você inserir o nome da política.

LdapConnectorClass

Ao usar a política LDAP com um LDAP personalizado provedor (não fornecido pela Apigee), especifique a classe do conector de LDAP totalmente qualificado. Essa foi a classe em que você implementou o ExternalLdapConProvider da Apigee interface gráfica do usuário.

LdapResource

Digite o nome do ambiente do recurso LDAP. Consulte Criar um recurso LDAP para mais informações.

BaseDN

O nível básico do LDAP no qual todos os seus dados existem. Por exemplo, em Provedor LDAP da Apigee, todos os dados estão em dc=apigee,dc=com.

  • ref: use para especificar uma variável de fluxo que contém o valor de BaseDN, como apigee.baseDN. ref tem precedência sobre um valor BaseDN explícito. Se você especificar ref e value, ref tem prioridade. Se a referência não for resolvida em ambiente de execução, o valor é usado.

Scope

  • objeto: a autenticação ou a pesquisa ocorre apenas no nível base do LDAP.
  • onelevel: a autenticação ou a pesquisa ocorrem um nível abaixo do base nível
  • subtree (padrão): a autenticação ou a pesquisa ocorre no nível base e de forma recursiva abaixo da base.

Authentication

Authentication

Elemento pai do comportamento de autenticação que você implementa.

UserName

Elemento vazio que assume um dos seguintes atributos:

  • ref: uma referência ao nome de usuário na solicitação, como request.header.username
  • value: o próprio nome de usuário.

Se você não estiver autenticando com nome de usuário ou se o nome de usuário não estiver incluído no não é preciso incluir esse elemento.

Se o nome de usuário estiver na solicitação, mas você quiser autenticar um usuário com um atributo DN além do nome de usuário, como e-mail, inclua um SearchQuery para receber o e-mail do usuário. associados à senha. A política LDAP usa o nome de usuário para consultar o provedor LDAP para o endereço de e-mail correspondente, que é usado na autenticação.

Password

Elemento vazio que assume um dos seguintes atributos:

  • ref: uma referência à senha na solicitação, como request.header.password
  • value: a própria senha criptografada

SearchQuery

Se quiser autenticar usando um atributo DN que não seja nome de usuário, como e-mail, configurar a política LDAP para receber um atributo DN da solicitação (como nome de usuário); usado para identificar o usuário no LDAP, recuperar o e-mail e autenticar a usuário.

Por exemplo, presumir que o LDAP define um "e-mail" atributo para armazenar endereços de e-mail:

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

Pesquisa

Search

Elemento pai do comportamento de pesquisa implementado.

SearchQuery

Ao identificar o usuário com metadados na solicitação ou resposta, você pode usar esse para recuperar atributos DN adicionais para o usuário do LDAP. Por exemplo, se o solicitação contém o e-mail do usuário, e seu LDAP define um atributo mail para para armazenar endereços de e-mail de usuários, use a seguinte configuração:

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

Essa consulta pesquisa no LDAP um e-mail que corresponda ao e-mail da solicitação e o agora pode recuperar outros atributos DN para esse usuário com os atributos .

Attributes

Use um ou mais elementos <Attribute> para identifique os metadados de DN que você quer recuperar para o usuário. Pelo menos um atributo é obrigatórios.

Por exemplo, depois que SearchQuery identifica o usuário, o agora pode recuperar atributos DN para o usuário, como endereço, número de telefone e o o título do usuário, como mostrado no exemplo a seguir.

Os valores de atributo são os nomes de atributos DN definidos no LDAP.

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

Notas de uso

O Apigee Edge para nuvem privada permite que você aproveite um provedor LDAP em chamadas de API. Com o LDAP os aplicativos podem autenticar as credenciais dos usuários armazenados no LDAP, e você pode recuperar nomes distintos (DNs) do LDAP—os metadados, ou atributos, associados ao cada usuário, como e-mail, endereço e número de telefone. O DN retornado é armazenado em uma variável para seu uso pelo proxy de API.

Criar um recurso LDAP

A política LDAP utiliza um recurso LDAP que você cria no Apigee Edge. Um recurso LDAP fornece as informações de conexão ao repositório LDAP.

Para criar e gerenciar recursos LDAP, use a API e o payload a seguir:

API

Criar (POST) um recurso LDAP ou listar (GET) todos os recursos LDAP:

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

Acessar detalhes de (GET), Atualizar (POST) e excluir (DELETE) um recurso LDAP:

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

Payload

Confira a seguir um exemplo de payload XML com comentários de uso.

<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>

Exemplo de curl: criar um recurso LDAP

O exemplo a seguir cria um recurso LDAP chamado ldap1.

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>'

Códigos de resposta

Veja a seguir os códigos de resposta HTML que a política retorna para sucesso ou falha:

  • Sucesso: 200
  • Falha: 401.

Como usar um provedor LDAP personalizado no Edge para nuvem privada

O uso de um Provedor LDAP

O Apigee Edge para nuvem privada vem com um provedor LDAP já configurado para interagem com a política LDAP. No entanto, se você estiver usando um provedor LDAP personalizado, precisará ativar provedor para permitir a política LDAP. Para fazer isso:

  1. Na classe do provedor LDAP, implemente a interface 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. No <LdapConnectorClass> da configuração da política (próximas seções), faça o seguinte: adicione o nome de classe totalmente qualificado do seu provedor LDAP personalizado.
  3. Faça o download deste arquivo: custom-ldap.jar_.zip. Talvez seja necessário clicar com o botão direito do mouse e selecionar Salvar como.
  4. Descompacte-o.
  5. Adicione o arquivo custom-ldap.jar ao seu ambiente e verifique se ele está no seu caminho de classe.
  6. Crie um recurso de ambiente para seu provedor LDAP. Você vai usar o recurso de ambiente no elemento <LdapResource> da política LDAP.

Usar o SDK LDAP UnboundID para Java

Você pode usar o SDK LDAP UnboundID com a política LDAP, mas primeiro é necessário fazer o download da versão 2.3.1 e adicione-o a cada um dos caminhos de classe de seu processador de mensagens.

Para usar o SDK LDAP UnboundID com a política LDAP:

  1. Abra um navegador e navegue até o repositório de arquivos do Sourceforge para o SDK LDAP do UnboundID:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Encontre a versão 2.3.1 (SE ou Standard Edition) do SDK e faça o download do arquivo ZIP para essa versão. Por exemplo, faça o download de "unboundid-ldapsdk-2.3.1-se.zip".
  3. Extraia o arquivo JAR do arquivo ZIP do SDK, conforme mostrado no exemplo a seguir:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    Esse comando extrai apenas o arquivo JAR para o diretório ~/tmp. Ele descarta o diretório com -j, embora isso seja opcional.

  4. Em cada nó do processador de mensagens:
    1. Copie o arquivo JAR no /opt/apigee/edge-gateway/lib/thirdparty.
    2. Se necessário, conceda permissão ao usuário da Apigee no arquivo JAR para que o processador de mensagens possa acessá-lo.
    3. O Edge adiciona todas as bibliotecas de terceiros à /opt/apigee/edge-gateway/lib/thirdparty para o caminho de classe.

    4. Reinicie o processador de mensagens:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Variáveis de fluxo

Veja a seguir as variáveis da política LDAP preenchidas por um SearchQuery.

Variável

Descrição

ldap.policyName.execution.success

Depois que a política for executada, essa variável de fluxo conterá um valor "true" ou "falso", dependendo do resultado.

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

O formato flexível dessa variável, o índice em particular: considera vários atributos, bem como atributos com várias e a distribuição dos valores dos dados. O índice é um número que começa em 1. Se nenhum número de índice for fornecido, o padrão o número de índice é 1.

Se a política devolver endereço, telefone e e-mail, você poderá recuperar o primeiro atributo usando estas variáveis:

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

Se você quiser recuperar o terceiro atributo de endereço nos resultados da pesquisa, use isto:

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

Se um atributo tiver diversos valores (por exemplo, se um usuário tiver vários valores endereços de e-mail), você recuperaria o segundo endereço de e-mail dos resultados desta forma:

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

Códigos de erro

Os erros retornados pelas políticas de borda seguem um formato consistente, conforme descrito na Referência do código de erro.

Esta política usa os seguintes códigos de erro:

Código do erro A mensagem
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.