Criterio LDAP

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Cosa

Il criterio LDAP fornisce:

  • Autenticazione: le credenziali utente fornite nella richiesta vengono convalidate. con le credenziali del provider LDAP. Il criterio LDAP offre molta flessibilità con che consente di utilizzare qualsiasi valore DN insieme alla password, anche se tale valore DN che vuoi non sia nella richiesta. Ad esempio, supponi di dover utilizzare email / password per autenticazione. Le opzioni possibili sono le seguenti:
    • Se l'indirizzo email è presente nella richiesta, puoi semplicemente utilizzarlo con la password per LDAP autenticazione.
    • Se l'indirizzo email non è nella richiesta, ma è presente un altro attributo DN (come il numero di telefono), puoi utilizzare il numero di telefono per ricevere l'email corrispondente da LDAP, quindi utilizzare email / password per l'autenticazione.
  • Ricerca del nome distinto (DN): oltre all'autenticazione, è possibile eseguire utilizzare il criterio LDAP anche per identificare un attributo utente nella richiesta, come email, e eseguire una query che recupera altri attributi DN da LDAP per quell'utente. Il DN recuperato è archiviati in una variabile.

Utilizza il criterio LDAP se l'accesso alle risorse protette deve essere limitato agli utenti nel tuo LDAP ad esempio utenti amministratori, utenti dell'organizzazione e sviluppatori, in particolare quando L'accesso al token OAuth non è necessario o è troppo complesso. Il criterio è inoltre pensato per recupero dei metadati del nome di dominio da utilizzare nei flussi proxy API.

Ad esempio, puoi fare in modo che una chiamata API venga eseguita solo quando un utente viene autenticato correttamente e LDAP; e, facoltativamente, di recuperare gli attributi DN (Domain Name) dell'utente dopo l'autenticazione abbia esito positivo.

Per ulteriori informazioni, consulta:

Esempi

Autenticazione nome utente/password

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

Questo esempio fornisce l'autenticazione su un provider LDAP. Il criterio trasmette il nome utente e la password dalla richiesta di autenticazione a LDAP.

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

Questo criterio ottiene il DN dell'utente con l'email nell'intestazione della richiesta, quindi autentica l'utente rispetto a LDAP con la password fornita nell'intestazione della richiesta.

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

Questo criterio fa riferimento a un provider LDAP personalizzato. Utilizza l'indirizzo email nella richiesta per identificare l'utente, poi recupera l'indirizzo, il numero di telefono e il titolo dell'utente da LDAP. Gli attributi DN recuperati vengono memorizzati in una variabile. Consulta la sezione "Norme specifiche variabili".

Per eseguire ricerche in LDAP e recuperare gli attributi DN, la richiesta deve includere l'amministratore e credenziali.

Riferimento elemento

Di seguito sono riportate le descrizioni degli elementi e degli attributi dei criteri LDAP.

Elemento

Descrizione

Ldap

Elemento principale con un attributo nome per inserire il nome del criterio.

LdapConnectorClass

Quando utilizzi il criterio LDAP con un protocollo LDAP personalizzato provider (non fornito da Apigee), specifica la classe completa del connettore LDAP. Questa è la classe in cui hai implementato ExternalLdapConProvider di Apigee a riga di comando.

LdapResource

Inserisci il nome ambiente della risorsa LDAP. Consulta la sezione Creare Risorsa LDAP per ulteriori informazioni.

BaseDN

Il livello di base di LDAP con cui esistono tutti i dati. Ad esempio, nel Provider LDAP di Apigee, tutti i dati sono sotto dc=apigee,dc=com.

  • ref: da utilizzare per specificare una variabile di flusso contenente il valore BaseDN, ad esempio apigee.baseDN. ref ha la precedenza su un valore BaseDN esplicito. Se specifichi sia ref che value, ref ha la priorità. Se il riferimento non si risolve in runtime, viene usato il valore.

Scope

  • object: l'autenticazione o la ricerca si verificano solo al livello base di LDAP.
  • onelevel: l'autenticazione o la ricerca avvengono a un livello sotto la base. livello.
  • subtree (predefinito): l'autenticazione o la ricerca avvengono al livello di base. e in modo completamente ricorsivo al di sotto della base.

Autenticazione

Authentication

Elemento principale per il comportamento di autenticazione implementato.

UserName

Elemento vuoto che accetta uno dei seguenti attributi:

  • ref: un riferimento al nome utente nella richiesta, ad esempio request.header.username
  • value: il nome utente

Se non esegui l'autenticazione con il nome utente o se il nome non è incluso nel non è necessario includere questo elemento.

Se nella richiesta è presente il nome utente, ma vuoi autenticare un utente con un attributo DN diverso dal nome utente, ad esempio l'email, includi un SearchQuery per ricevere l'email dell'utente associati alla password. Il criterio LDAP utilizza il nome utente per eseguire query al provider LDAP per l'indirizzo email corrispondente, che verrà poi utilizzato per l'autenticazione.

Password

Elemento vuoto che accetta uno dei seguenti attributi:

  • ref: un riferimento alla password nella richiesta, ad esempio request.header.password
  • value: la password criptata

SearchQuery

Se desideri eseguire l'autenticazione utilizzando un attributo DN diverso dal nome utente, come l'email, configurare il criterio LDAP per ottenere un attributo DN dalla richiesta (come il nome utente), utilizzata per identificare l'utente in LDAP, recuperare l'email e autenticare utente.

Ad esempio, supponendo che LDAP definisca una "mail" per la memorizzazione dell'indirizzo email:

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

Ricerca

Search

Elemento principale per il comportamento di ricerca implementato.

SearchQuery

Se identifichi l'utente con i metadati nella richiesta o nella risposta, puoi utilizzare questo per recuperare attributi DN aggiuntivi dell'utente da LDAP. Ad esempio, se contiene l'email dell'utente e il tuo LDAP definisce un attributo mail per per archiviare gli indirizzi email degli utenti, dovresti utilizzare la seguente impostazione:

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

Questa query cerca in LDAP un'email che corrisponde all'email nella richiesta e il criterio può ora recuperare attributi DN aggiuntivi per quell'utente con il parametro Attributi .

Attributes

Usa uno o più elementi <Attribute> per Identificare i metadati DN che vuoi recuperare per l'utente. Almeno un attributo è obbligatorio.

Ad esempio, dopo che SearchQuery ha identificato l'utente, il parametro il criterio consente di recuperare gli attributi DN dell'utente, come indirizzo, numero di telefono e dell'utente, come mostrato nell'esempio seguente.

I valori degli attributi sono i nomi degli attributi DN definiti nel tuo LDAP.

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

Note sull'utilizzo

Apigee Edge per il cloud privato consente di utilizzare un provider LDAP nelle chiamate API. Con LDAP le applicazioni possono autenticare le credenziali in base agli utenti archiviati in LDAP recuperare nomi distinti (DN) da LDAP: i metadati o gli attributi associati ogni utente, ad esempio email, indirizzo e numero di telefono. Il DN restituito è archiviato in una variabile per un ulteriore utilizzo da parte del proxy API.

Creare una risorsa LDAP

Il criterio LDAP sfrutta una risorsa LDAP che crei in Apigee Edge. Una risorsa LDAP fornisce le informazioni di connessione al repository LDAP.

Per creare e gestire le risorse LDAP, utilizza l'API e il payload seguenti:

API

Crea (POST) una risorsa o un elenco LDAP (GET) di tutte le risorse LDAP:

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

Visualizza i dettagli di (GET), aggiorna (POST) ed elimina (DELETE) una risorsa LDAP:

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

Payload

Di seguito è riportato un payload XML di esempio con commenti sull'utilizzo.

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

Esempio di curl: creare una risorsa LDAP

L'esempio seguente crea una risorsa LDAP denominata 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>'

Codici di risposta

Di seguito sono riportati i codici di risposta HTML restituiti dal criterio in caso di esito positivo o negativo:

  • Operazione riuscita: 200
  • Errore: 401

Utilizzo di un provider LDAP personalizzato in Edge per il cloud privato

L'uso di un Provider LDAP

Apigee Edge per il cloud privato viene fornito con un provider LDAP già configurato interagiscono con il criterio LDAP. Tuttavia, se utilizzi un provider LDAP personalizzato, devi attivare il provider possa supportare il criterio LDAP. Per:

  1. Nella classe del provider LDAP, implementa l'interfaccia 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. In <LdapConnectorClass> della configurazione del criterio (sezioni successive), aggiungi il nome completo della classe del provider LDAP personalizzato.
  3. Scarica questo file: custom-ldap.jar_.zip. Potrebbe essere necessario fare clic con il tasto destro del mouse e selezionare Salva con nome.
  4. Decomprimilo.
  5. Aggiungi il file custom-ldap.jar al tuo ambiente e assicurati che si trovi nel tuo classpath.
  6. Crea una risorsa di ambiente per il tuo provider LDAP. Utilizzerai la risorsa di ambiente nell'elemento <LdapResource> del criterio LDAP.

L'utilizzo del SDK LDAP UnboundID per Java

Puoi utilizzare l'SDK LDAP UnboundID con il criterio LDAP, ma devi prima scaricare la versione 2.3.1 e aggiungerlo a ogni classpath del vostro Processore di messaggi.

Per utilizzare l'SDK LDAP UnboundID con il criterio LDAP:

  1. Apri un browser e vai al repository file di Sourceforge per l'SDK LDAP UnboundID:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Individua la versione 2.3.1 (SE o Standard Edition) dell'SDK e scarica il file ZIP per quella versione. Ad esempio, scarica "unboundid-ldapsdk-2.3.1-se.zip".
  3. Estrai il file JAR dal file ZIP dell'SDK, come illustrato nell'esempio seguente:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    Il comando estrae solo il file JAR nella directory ~/tmp. Elimina la directory struttura con -j, anche se si tratta di un'opzione facoltativa.

  4. Su ciascun nodo del processore di messaggi:
      .
    1. Copia il file JAR nel pannello Directory /opt/apigee/edge-gateway/lib/thirdparty.
    2. Se necessario, concedi l'autorizzazione utente ad Apigee per il file JAR in modo che il processore di messaggi possa accedervi.
    3. Edge aggiunge tutte le librerie di terze parti Directory /opt/apigee/edge-gateway/lib/thirdparty al classpath.

    4. Riavvia il processore di messaggi:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Variabili di flusso

Di seguito sono riportate le variabili del criterio LDAP compilate da un SearchQuery.

Variabile

Descrizione

ldap.policyName.execution.success

Dopo l'esecuzione del criterio, questa variabile di flusso contiene il valore "true" o "false", a seconda del risultato.

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

Il formato flessibile di questa variabile, l'indice in particolare: prende in considerazione più attributi, nonché quelli con più e i relativi valori. L'indice è un numero che inizia da 1. Se non viene fornito alcun numero di indice, il valore predefinito è 1.

Se il criterio restituisce un indirizzo, un numero di telefono e un'email, puoi recuperare il primo attributo e il valore utilizzando queste variabili:

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

Per recuperare l'attributo del terzo indirizzo nei risultati di ricerca, questo:

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

Se un attributo aveva più valori (ad esempio, se un utente ha più indirizzi email indirizzi email), recupera il secondo indirizzo email dai risultati in questo modo:

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

Codici di errore

Gli errori restituiti dai criteri di Edge seguono un formato coerente, come descritto nella pagina Riferimento al codice di errore.

This policy uses the following error codes:

Error Code Message
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.