LDAP 認証導入Zend_Auth_Adapter_Ldap は、LDAP サービスによるウェブアプリケーションの認証をサポートします。 ユーザ名やドメイン名の正規化や複数ドメインの認証、 フェイルオーバー機能などがあります。 » Microsoft Active Directory と » OpenLDAP で動作確認をしていますが、それ以外の LDAP サービスプロバイダでも動作するはずです。 このドキュメントで扱う内容は、 Zend_Auth_Adapter_Ldap の使い方やその API、 使用可能なオプション、トラブルシューティングの方法、 そして Active Directory 用および OpenLDAP 用の設定例です。 使用法Zend_Auth_Adapter_Ldap による認証をアプリケーションに手っ取り早く組み込むには、 Zend_Controller を使うかどうかにかかわらず、次のようなコードを書くことになります。
もちろんログを記録するかどうかは自由ですが、 ロガーを使用することを強く推奨します。 Zend_Auth_Adapter_Ldap は、皆がほしがるであろう情報をすべて $messages (詳細は以下で) に記録します。 この機能を使用すれば、デバッグを容易に行えるようになります。 上のコードでは、Zend_Config_Ini を用いてアダプタのオプションを読み込んでいます。 これもまた必須ではありません。普通の配列を使用しても同様に動作します。 以下に application/config/config.ini ファイルの例を示します。 このファイルでは、ふたつの別のサーバの設定を記述しています。 複数のサーバのオプションを設定しておくと、 アダプタ側では認証に成功するまで順にそれぞれのサーバへの認証を試みます。 サーバの名前 ('server1' や 'server2' など) は任意です。オプション配列についての詳細は、以下の サーバのオプション に関するセクションを参照ください。 Zend_Config_Ini では、等号 (=) を含む値 (以下の例では DN など) はクォートしなければならないことに注意しましょう。
この設定を使用すると、Zend_Auth_Adapter_Ldap はまず OpenLDAP サーバ s0.foo.net でのユーザ認証を試みます。 何らかの理由で認証に失敗した場合は、AD サーバ dc1.w.net を用いて認証を試みます。 異なるドメインのサーバを指定したことで、 この設定では複数ドメインの認証を行えるようになっています。 同一ドメイン内の複数サーバを指定して冗長性を確保することもできます。 この場合、OpenLDAP には短い形式の NetBIOS ドメイン名 (Windows で使用するもの) は不要ですが、設定していることに注意しましょう。これは、名前の正規化のために使用します (以下の ユーザ名の正規化 のセクションを参照ください)。 APIZend_Auth_Adapter_Ldap のコンストラクタは、3 つのパラメータを受け取ります。 $options パラメータは必須で、 ひとつあるいは複数のオプションを含む配列でなければなりません。 これは、Zend_Ldap のオプションの 配列の配列 であることに注意しましょう。 単一の LDAP サーバの設定のみを指定する場合でも、 「設定オプションの配列を配列の中に格納する」形式でなければなりません。 以下に、サンプルのオプションパラメータを » print_r() で出力した例を示します。これは、ふたつの LDAP サーバ s0.foo.net と dc1.w.net の設定を含むものです (先ほどの INI ファイルと同じ設定です)。
上の各オプションで設定した内容の違いの主な理由は、AD へのバインド時にはユーザ名が DN 形式である必要がないということです (以下の サーバのオプション における bindRequiresDn の説明を参照ください)。 つまり、認証時のユーザ名から DN を取得するために使用する多くのオプションは 省略できるということです。
サーバの名前 (上の例における 'server1' や 'server2') は基本的には何でもかまいません。しかし、Zend_Config を用いる場合は、 (数値インデックスではなく) 識別子を使用しなければなりません。また、 各ファイルフォーマットで特別な意味を持つ文字 (INI のプロパティ区切り文字 '.' や XML エンティティ参照の '&' など) は含まないようにしましょう。 複数のサーバオプションを設定しておけば、 このアダプタで複数ドメインのユーザ認証を行うことができます。 また、ひとつのサーバが使用できない場合に別のサーバに問い合わせを行う フェイルオーバー機能も提供できます。
Zend_Auth_Adapter_Ldap コンストラクタのパラメータに渡す ユーザ名とパスワードは、認証に用いる情報 (つまり、HTML のログインフォームでユーザが入力した情報) を表します。これらは、 setUsername() メソッドと setPassword() メソッドで指定することもできます。 サーバのオプションZend_Auth_Adapter_Ldap のコンテキストにおける サーバのオプションは次のようなものです。これらは、ほとんどそのままの形で Zend_Ldap::setOptions() に渡されます。
デバッグメッセージの収集Zend_Auth_Adapter_Ldap は、 authenticate() メソッド内でのデバッグ情報を収集します。この情報は、Zend_Auth_Result オブジェクト内にメッセージとして保存されます。 Zend_Auth_Result::getMessages() が返す配列は次のような形式になります。
実際に使用する上では、まずインデックス 0 の内容はユーザ向けに表示することになります (FlashMessenger ヘルパーなどを使用します)。そしてインデックス 1 はログに記録し、 デバッグ情報が必要ならインデックス 2 以降も同様に記録します (最後のメッセージには、常にインデックス 1 の内容も含まれています)。 サーバ固有の共通オプションActive Directory 用のオプションADS 用のオプションとして注目すべきものは次のとおりです。
OpenLDAP 用のオプションOpenLDAP、あるいは posixAccount 形式のスキーマを用いる一般的な LDAP サーバ用のオプションとして注目すべきものは次のとおりです。
|