|
|
@@ -1,463 +0,0 @@
|
|
|
-<?xml version="1.0" encoding="UTF-8"?>
|
|
|
-<!-- EN-Revision: 15742 -->
|
|
|
-<!-- Reviewed: no -->
|
|
|
-<sect1 id="zend.ldap.using">
|
|
|
-
|
|
|
- <title>Einleitung</title>
|
|
|
-
|
|
|
- <note>
|
|
|
- <title>Minimale Funktionalität</title>
|
|
|
- <para>
|
|
|
- Im Moment ist diese Klasse nur dafür gedacht, die beschränkte Funktionalität zu bieten,
|
|
|
- die für <link
|
|
|
- linkend="zend.auth.adapter.ldap"><classname>Zend_Auth_Adapter_Ldap</classname></link>
|
|
|
- nötig ist. Weiterführende Verwendungsmöglichkeiten wie das Suchen, Erstellen,
|
|
|
- Bearbeiten oder Umbenennen von Objekten im Verzeichnis werden im Moment nicht
|
|
|
- unterstützt und werden zu einem späteren Zeitpunkt hinzugefügt werden.
|
|
|
- </para>
|
|
|
- </note>
|
|
|
-
|
|
|
- <para>
|
|
|
- <classname>Zend_Ldap</classname> ist eine Klasse, mit der LDAP-Operationen, wie das
|
|
|
- Durchsuchen, das Bearbeiten oder die Bindung an Einträge im LDAP-Verzeichnis, durchgeführt
|
|
|
- werden können.
|
|
|
- </para>
|
|
|
-
|
|
|
- <sect2 id="zend.ldap.using.theory-of-operation">
|
|
|
-
|
|
|
- <title>Beschreibung</title>
|
|
|
-
|
|
|
- <para>
|
|
|
- Diese Komponente besteht im Moment aus zwei Klassen, <classname>Zend_Ldap</classname>
|
|
|
- und <classname>Zend_Ldap_Exception</classname>. Ein
|
|
|
- <classname>Zend_Ldap</classname>-Objekt repräsentiert konzeptionell die Bindung an einen
|
|
|
- einzelnen LDAP server. Die Parameter für diese Bindung können explizit oder in der form
|
|
|
- eines Optionen-Arrays angegeben werden.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Die Verwendung von <classname>Zend_Ldap</classname> hängt von der Art Ihres LDAP-Servers
|
|
|
- ab und kann am besten mit einigen einfachen Beispielen erklärt werden.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Wenn Sie OpenLDAP benutzen, wäre ein einfaches Beispiel das Folgende (Beachten Sie:
|
|
|
- Die Option <code>bindRequiresDn</code> ist wichtig, wenn Sie <emphasis>nicht</emphasis>
|
|
|
- Microsoft Active Directory benutzen):
|
|
|
-
|
|
|
- <programlisting language="php"><![CDATA[
|
|
|
-$options = array(
|
|
|
- 'host' => 's0.foo.net',
|
|
|
- 'username' => 'CN=user1,DC=foo,DC=net',
|
|
|
- 'password' => 'pass1',
|
|
|
- 'bindRequiresDn' => true,
|
|
|
- 'accountDomainName' => 'foo.net',
|
|
|
- 'baseDn' => 'OU=Sales,DC=foo,DC=net',
|
|
|
-);
|
|
|
-$ldap = new Zend_Ldap($options);
|
|
|
-$acctname = $ldap->getCanonicalAccountName('abaker',
|
|
|
- Zend_Ldap::ACCTNAME_FORM_DN);
|
|
|
-echo "$acctname\n";
|
|
|
-]]></programlisting>
|
|
|
-
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Wenn Sie Microsoft Active Directory nutzen, sollte das folgende Beispiel funktionieren:
|
|
|
-
|
|
|
- <programlisting language="php"><![CDATA[
|
|
|
-$options = array(
|
|
|
- 'host' => 'dc1.w.net',
|
|
|
- 'useStartTls' => true,
|
|
|
- 'username' => 'user1@w.net',
|
|
|
- 'password' => 'pass1',
|
|
|
- 'accountDomainName' => 'w.net',
|
|
|
- 'accountDomainNameShort' => 'W',
|
|
|
- 'baseDn' => 'CN=Users,DC=w,DC=net',
|
|
|
-);
|
|
|
-$ldap = new Zend_Ldap($options);
|
|
|
-$acctname = $ldap->getCanonicalAccountName('bcarter',
|
|
|
- Zend_Ldap::ACCTNAME_FORM_DN);
|
|
|
-echo "$acctname\n";
|
|
|
-]]></programlisting>
|
|
|
-
|
|
|
- Beachten Sie, dass wir die Methode <code>getCanonicalAccountName()</code> hier nur
|
|
|
- benutzen, um den Domain-Name des Accounts 'bcarter' zu erhalten, weil das so ziemlich
|
|
|
- alles von dem wenigen Code, der im Moment in dieser Klasse vorhanden ist, verwendet.
|
|
|
- </para>
|
|
|
-
|
|
|
- <sect3 id="zend.ldap.using.theory-of-operation.username-canonicalization-automatic">
|
|
|
-
|
|
|
- <title>Automatische Normalisierung des Benutzernamens bei der Server-Bindung</title>
|
|
|
-
|
|
|
- <para>
|
|
|
- Wenn <code>bind()</code> mit einem nicht-DN-konformen Benutzernamen aufgerufen wird
|
|
|
- aber <code>bindRequiresDN</code> <constant>TRUE</constant> ist und kein Benutzername in
|
|
|
- DN-Form als Option angegeben wird, wird die Server-Bindung fehlschlagen. Wenn
|
|
|
- allerdings ein Benutzername in DN-Form im Optionen-Array übergeben wurde, wird
|
|
|
- <classname>Zend_Ldap</classname> sich zuerst mit diesem Benutzernamen an den Server
|
|
|
- binden, den Account-Domain Name für den Benutzernamen, der <code>bind()</code>
|
|
|
- suchen und sich dann neu mit diesem DN verbinden.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Dieses Verhalten ist wichtig für <classname>Zend_Auth_Adapter_Ldap</classname>, das
|
|
|
- den eingegebenen Benutzernamen direkt an <code>bind()</code> weiterleitet.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Das folgende Beispiel zeigt, wie der nicht DN-konforme Benutzername
|
|
|
- '<code>abaker</code>' mit <code>bind()</code> benutzt werden kann:
|
|
|
-
|
|
|
- <programlisting language="php"><![CDATA[
|
|
|
-$options = array(
|
|
|
- 'host' => 's0.foo.net',
|
|
|
- 'username' => 'CN=user1,DC=foo,DC=net',
|
|
|
- 'password' => 'pass1',
|
|
|
- 'bindRequiresDn' => true,
|
|
|
- 'accountDomainName' => 'foo.net',
|
|
|
- 'baseDn' => 'OU=Sales,DC=foo,DC=net',
|
|
|
-);
|
|
|
-$ldap = new Zend_Ldap($options);
|
|
|
-$ldap->bind('abaker', 'moonbike55');
|
|
|
-$acctname = $ldap->getCanonicalAccountName('abaker',
|
|
|
- Zend_Ldap::ACCTNAME_FORM_DN);
|
|
|
-echo "$acctname\n";
|
|
|
-]]></programlisting>
|
|
|
-
|
|
|
- Der Aufruf von <code>bind()</code> in diesem Beispiel erkennt dass der Benutzername
|
|
|
- '<code>abaker</code>' nicht in DN-Form ist und dass <code>bindRequiresDn</code>
|
|
|
- <constant>TRUE</constant> ist, verwendet '<code>CN=user1,DC=foo,DC=net</code>' und
|
|
|
- '<code>pass1</code>' zum Verbinden, empfängt den DN für '<code>abaker</code>',
|
|
|
- löst die Bindung und bindet sich dann neu mit dem jetzt bekannten
|
|
|
- '<code>CN=Alice Baker,OU=Sales,DC=foo,DC=net</code>'.
|
|
|
- </para>
|
|
|
-
|
|
|
- </sect3>
|
|
|
-
|
|
|
- <sect3 id="zend.ldap.using.theory-of-operation.options">
|
|
|
-
|
|
|
- <title>Zend_Ldap Optionen</title>
|
|
|
-
|
|
|
- <para>
|
|
|
- Die <classname>Zend_Ldap</classname>-Komponente akzeptiert ein Array von Optionen,
|
|
|
- das entweder im Konstruktor oder der Methode <code>setOptions()</code> übergeben
|
|
|
- werden kann. Folgende Optionen sind möglich:
|
|
|
-
|
|
|
- <table id="zend.ldap.using.theory-of-operation.options.table">
|
|
|
- <title>Zend_Ldap Optionen</title>
|
|
|
- <tgroup cols="2">
|
|
|
- <thead>
|
|
|
- <row>
|
|
|
- <entry>Name</entry>
|
|
|
- <entry>Beschreibung</entry>
|
|
|
- </row>
|
|
|
- </thead>
|
|
|
- <tbody>
|
|
|
- <row>
|
|
|
- <entry>host</entry>
|
|
|
- <entry>
|
|
|
- Host-Name des LDAP-Servers, wenn er nicht in <code>connect()</code>
|
|
|
- überschrieben wird. (kann auch verwendet werden, wenn die Komponente
|
|
|
- versucht, Benutzernamen in <code>bind()</code> zu normalisieren).
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>port</entry>
|
|
|
- <entry>
|
|
|
- Port des LDAP-Servers, wenn er nicht in <code>connect()</code>
|
|
|
- überschrieben wird.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>useStartTls</entry>
|
|
|
- <entry>
|
|
|
- Ob der LDAP-Client TLS (auch SSL-v2) verschlüsselte Übertragung
|
|
|
- verwenden soll. Der Wert <constant>TRUE</constant> ist auf jeden Fall in
|
|
|
- Produktivumgebungen empfohlen, damit Passwörter nicht im Klartext
|
|
|
- übertragen werden. Der Standardwert ist <constant>FALSE</constant>, weil Server
|
|
|
- fast immer verlangen, dass ein Verschlüsselungszertifikat
|
|
|
- nachinstalliert wird.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>useSsl</entry>
|
|
|
- <entry>
|
|
|
- Ob der LDAP Client SSL verschüsselte Übertragung unterstützen sollten
|
|
|
- oder nicht. Die <code>useSsl</code> und <code>useStartTls</code>
|
|
|
- Optionen sind gegenseitig exklusiv.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>username</entry>
|
|
|
- <entry>
|
|
|
- Der Standard-Benutzername. Bei manchen Servern muss dieser in DN-Form
|
|
|
- vorliegen.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>password</entry>
|
|
|
- <entry>
|
|
|
- Das Passwort des Standard-Benutzernamens.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>bindRequiresDn</entry>
|
|
|
- <entry>
|
|
|
- Wenn dieser Wert<constant>TRUE</constant> ist, wird
|
|
|
- <classname>Zend_Ldap</classname> den Domain-Name für den Account, der
|
|
|
- zur Bindung genutzt wird, suchen, wenn der Benutzername noch nicht in
|
|
|
- DN-Form ist. Der Standardwert ist <constant>FALSE</constant>.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>baseDn</entry>
|
|
|
- <entry>
|
|
|
- Der Standard-DN, unter dem gesucht wird (bspw. Accounts). Diese Option
|
|
|
- wird für die meisten Account-Bezogenen Vorgänge benötigt und sollte
|
|
|
- den DN beinhalten, unter dem die Accounts liegen.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>accountCanonicalForm</entry>
|
|
|
- <entry>
|
|
|
- Eine Integerzahl, die die Art angibt, in der Account-Namen normalisiert
|
|
|
- werden. Schauen Sie für mehr Informationen in die Tabelle
|
|
|
- <emphasis>Accountnamen-Normalisierung</emphasis> weiter unten.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>accountDomainName</entry>
|
|
|
- <entry>
|
|
|
- Der vollqualifizierte Domain-Name, für den der LDAP-Server eine
|
|
|
- Autorität ist.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>accountDomainNameShort</entry>
|
|
|
- <entry>
|
|
|
- Der 'Kurz'-Domain-Name für den der LDAP-Server eine Autorität ist.
|
|
|
- Wird normalerweise in Windows-Netzwerken genutzt, um NetBIOS-Namen zu
|
|
|
- definieren, kann aber auch von Nicht-AD-Servern genutzt werden.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>accountFilterFormat</entry>
|
|
|
- <entry>
|
|
|
- Der LDAP-Suchfilter, der verwendet wird, um Accounts zu suchen. Dieser
|
|
|
- String ist ein Ausdruck im Stil von <ulink
|
|
|
- url="http://php.net/printf"><code>printf()</code></ulink>,
|
|
|
- der ein '<code>%s</code>' enthalten muss, das durch den Benutzernamen
|
|
|
- ersetzt wird. Der Standardwert ist
|
|
|
- '<code>(&(objectClass=user)(sAMAccountName=%s))</code>', es sei denn
|
|
|
- <code>bindRequiresDn</code> ist <constant>TRUE</constant>. In diesem Fall ist
|
|
|
- der Standardwert
|
|
|
- '<code>(&(objectClass=posixAccount)(uid=%s))</code>'.
|
|
|
- Wenn eigene Schemata benutzt werden, muss diese Option vielleicht
|
|
|
- geändert werden.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>allowEmptyPassword</entry>
|
|
|
- <entry>
|
|
|
- Einige LDAP Server können so konfiguriert werden das Sie ein leeres
|
|
|
- Passwort als anonyme Bindung akzeptieren. Dieses Verhalten ist fast
|
|
|
- immer unerwünscht. Aus diesem Grund sind leere Passwörter explizit nicht
|
|
|
- erlaubt. Wenn dieser Wert auf <constant>TRUE</constant> gesetzt wird ist die
|
|
|
- Übermittlung eines leeres Passwortes wärend des Bindens erlaubt.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry>optReferrals</entry>
|
|
|
- <entry>
|
|
|
- Auf <constant>TRUE</constant> gesetzt, zeigt diese Option dem LDAP Client das
|
|
|
- Referenzen gefolgt werden soll. Der Standardwert ist <constant>FALSE</constant>.
|
|
|
- </entry>
|
|
|
- </row>
|
|
|
- </tbody>
|
|
|
- </tgroup>
|
|
|
- </table>
|
|
|
-
|
|
|
- </para>
|
|
|
-
|
|
|
- </sect3>
|
|
|
-
|
|
|
- <sect3 id="zend.ldap.using.theory-of-operation.account-name-canonicalization">
|
|
|
-
|
|
|
- <title>Normalisierung von Accountnamen</title>
|
|
|
-
|
|
|
- <para>
|
|
|
- Die Optionen <code>accountDomainName</code> and <code>accountDomainNameShort</code>
|
|
|
- werden für zwei Zwecke genutzt: Erstens bieten sie Mehrdomain-Authentifizierung und
|
|
|
- Möglichkeiten zur Ausfallsicherung, und zweitens werden sie benutzt, um
|
|
|
- Benutzernamen zu normalisieren, nach der Vorgabe der Option
|
|
|
- <code>accountCanonicalForm</code>. Diese Option kann einen der folgenden Werte
|
|
|
- annehmen:
|
|
|
-
|
|
|
- <table id="zend.ldap.using.theory-of-operation.account-name-canonicalization.table">
|
|
|
- <title>accountCanonicalForm</title>
|
|
|
- <tgroup cols="3">
|
|
|
- <thead>
|
|
|
- <row>
|
|
|
- <entry>Name</entry>
|
|
|
- <entry>Wert</entry>
|
|
|
- <entry>Beispiel</entry>
|
|
|
- </row>
|
|
|
- </thead>
|
|
|
- <tbody>
|
|
|
- <row>
|
|
|
- <entry><code>ACCTNAME_FORM_DN</code></entry>
|
|
|
- <entry>1</entry>
|
|
|
- <entry>CN=Alice Baker,CN=Users,DC=example,DC=com</entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry><code>ACCTNAME_FORM_USERNAME</code></entry>
|
|
|
- <entry>2</entry>
|
|
|
- <entry>abaker</entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry><code>ACCTNAME_FORM_BACKSLASH</code></entry>
|
|
|
- <entry>3</entry>
|
|
|
- <entry>EXAMPLE\abaker</entry>
|
|
|
- </row>
|
|
|
- <row>
|
|
|
- <entry><code>ACCTNAME_FORM_PRINCIPAL</code></entry>
|
|
|
- <entry>4</entry>
|
|
|
- <entry>abaker@example.com</entry>
|
|
|
- </row>
|
|
|
- </tbody>
|
|
|
- </tgroup>
|
|
|
- </table>
|
|
|
-
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Die standardmäßige Normalisierung hängt davon am, welche Optionen zum Account-DN
|
|
|
- übergeben wurden. Wenn <code>accountDomainNameShort</code> angegeben wurde, ist
|
|
|
- der Standardwert von <code>accountCanonicalForm</code>
|
|
|
- <code>ACCTNAME_FORM_BACKSLASH</code>. Wenn dagegen <code>accountDomainName</code>
|
|
|
- angegeben wurde, ist der Standardwert <code>ACCTNAME_FORM_PRINCIPAL</code>.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Die Normalisierung von Account-Namen stellt sicher, dass der String, der zur
|
|
|
- Identifizierung eines Accounts verwendet wird, einheitlich ist, egal was
|
|
|
- an <code>bind()</code> übergeben wurde. Wenn der Benutzer bspw.
|
|
|
- <emphasis>abaker@example.com</emphasis> oder einfach <emphasis>abaker</emphasis>
|
|
|
- als Benutzernamen angibt und <code>accountCanonicalForm</code> auf 3 gesetzt ist,
|
|
|
- wird der normalisierte Name <emphasis>EXAMPLE\abaker</emphasis> sein.
|
|
|
- </para>
|
|
|
-
|
|
|
- </sect3>
|
|
|
-
|
|
|
- <sect3 id="zend.ldap.using.theory-of-operation.multi-domain-failover">
|
|
|
-
|
|
|
- <title>Authentifizierung auf mehreren Domains und Ausfallsicherung</title>
|
|
|
-
|
|
|
- <para>
|
|
|
- <classname>Zend_Ldap</classname> an sich wird nicht versuchen, sich mit mehreren
|
|
|
- Servern zu verbinden. Allerdings ist <classname>Zend_Ldap</classname> auf dieses
|
|
|
- Szenario vorbereitet. Dazu können Sie einfach ein Array mit Optionen für mehrere
|
|
|
- Server durchlaufen und nacheinander versuchen, sich mit jedem Server zu verbinden.
|
|
|
- Wie oben beschrieben wird <code>bind()</code> automatisch jeden Benutzernamen
|
|
|
- normalisieren, also ist es egal, ob der Benutzer <code>abaker@foo.net</code> oder
|
|
|
- <code>W\bcarter</code> oder <code>cdavis</code> als Benutzernamen angibt -
|
|
|
- <code>bind()</code> wird fehlschlagen, wenn der Login nicht erfolgreich war.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Das folgende Beispiel zeigt Authentifizierung auf mehreren Domains und eine
|
|
|
- Ausfallsicherung.
|
|
|
-
|
|
|
- <programlisting language="php"><![CDATA[
|
|
|
-$acctname = 'W\\user2';
|
|
|
-$password = 'pass2';
|
|
|
-
|
|
|
-$multiOptions = array(
|
|
|
- 'server1' => array(
|
|
|
- 'host' => 's0.foo.net',
|
|
|
- 'username' => 'CN=user1,DC=foo,DC=net',
|
|
|
- 'password' => 'pass1',
|
|
|
- 'bindRequiresDn' => true,
|
|
|
- 'accountDomainName' => 'foo.net',
|
|
|
- 'accountDomainNameShort' => 'FOO',
|
|
|
- 'accountCanonicalForm' => 4, // ACCT_FORM_PRINCIPAL
|
|
|
- 'baseDn' => 'OU=Sales,DC=foo,DC=net',
|
|
|
- ),
|
|
|
- 'server2' => array(
|
|
|
- 'host' => 'dc1.w.net',
|
|
|
- 'useSsl' => true,
|
|
|
- 'username' => 'user1@w.net',
|
|
|
- 'password' => 'pass1',
|
|
|
- 'accountDomainName' => 'w.net',
|
|
|
- 'accountDomainNameShort' => 'W',
|
|
|
- 'accountCanonicalForm' => 4, // ACCT_FORM_PRINCIPAL
|
|
|
- 'baseDn' => 'CN=Users,DC=w,DC=net',
|
|
|
- ),
|
|
|
-);
|
|
|
-
|
|
|
-$ldap = new Zend_Ldap();
|
|
|
-
|
|
|
-foreach ($multiOptions as $name => $options) {
|
|
|
-
|
|
|
- echo "Versuche, mit den Server-Optionen für '$name' zu verbinden\n";
|
|
|
-
|
|
|
- $ldap->setOptions($options);
|
|
|
- try {
|
|
|
- $ldap->bind($acctname, $password);
|
|
|
- $acctname = $ldap->getCanonicalAccountName($acctname);
|
|
|
- echo "AUSGEFÜHRT: $acctname angemeldet\n";
|
|
|
- return;
|
|
|
- } catch (Zend_Ldap_Exception $zle) {
|
|
|
- echo ' ' . $zle->getMessage() . "\n";
|
|
|
- if ($zle->getCode() === Zend_Ldap_Exception::LDAP_X_DOMAIN_MISMATCH) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-]]></programlisting>
|
|
|
-
|
|
|
- Wenn die Bindung an einen Server aus irgendeinem Grund fehlschlägt, wird sie
|
|
|
- mit dem nächsten Server erneut versucht.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Der Aufruf von <code>getCanonicalAccountName</code> gibt den normalisierten
|
|
|
- Account-Namen zurück, den die Anwendung vermutlich benutzen würde, um Daten - wie
|
|
|
- bspw. Einstellungen - damit zu assoziieren. Die Option
|
|
|
- <code>accountCanonicalForm = 4</code>, die in diesem Fall in den Optionen aller
|
|
|
- Server gesetzt ist, stellt sicher, dass die normalisierte Form in einem
|
|
|
- einheitlichen Format ist, egal welcher Server am Ende benutzt wurde.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Die besondere Ausnahme <code>LDAP_X_DOMAIN_MISMATCH</code> tritt auf, wenn ein
|
|
|
- Account-Name angegeben wurde, der einen Domain-Teil beinhaltet (bspw.
|
|
|
- <code>abaker@foo.net</code> oder <code>FOO\abaker</code> und nicht nur
|
|
|
- <code>abaker</code>), aber dieser Domain-Teil mit keiner Domain in den aktuell
|
|
|
- ausgewählten Server-Optionen übereinstimmt. Diese Ausnahme zeigt an, dass der
|
|
|
- Server keine Autorität für diesen Account ist. In diesem Fall wird eine Bindung
|
|
|
- nicht ausgeführt, um unnötige Server-Anfragen zu vermeiden. Beachten Sie, dass
|
|
|
- die Anweisung <code>continue</code> in diesem Beispiel keine Auswirkung hat, aber
|
|
|
- Sie werden im praktischen Einsatz zur Fehlerbehandlung und aus Debugging-Gründen
|
|
|
- wahrscheinlich neben <code>LDAP_X_DOMAIN_MISMATCH</code> auch noch auf die
|
|
|
- Exception-Codes <code>LDAP_NO_SUCH_OBJECT</code> und
|
|
|
- <code>LDAP_INVALID_CREDENTIALS</code> prüfen wollen.
|
|
|
- </para>
|
|
|
-
|
|
|
- <para>
|
|
|
- Der obige Code ist dem sehr ähnlich, der in <link
|
|
|
- linkend="zend.auth.adapter.ldap"><classname>Zend_Auth_Adapter_Ldap</classname></link>
|
|
|
- verwendet wird. Wir empfehlen daher, einfach den Authentifizierungs-Adapter
|
|
|
- für Multi-Domain-Authentifizierung und LDAP-basierte Authentifizierung mit
|
|
|
- Ausfallsicherung zu verwenden (oder kopieren Sie den Code oben).
|
|
|
- </para>
|
|
|
-
|
|
|
- </sect3>
|
|
|
-
|
|
|
- </sect2>
|
|
|
-
|
|
|
-</sect1>
|
|
|
-<!--
|
|
|
-vim:se ts=4 sw=4 et:
|
|
|
--->
|