HTTP 認証アダプタ導入Zend_Auth_Adapter_Http は、 » RFC-2617 や » ベーシック、 » ダイジェスト HTTP 認証にほぼ準拠した実装を提供します。ダイジェスト認証とは HTTP 認証方式のひとつで、パスワードを平文でネットワークに送信する必要がないという点で ベーシック認証より優れています。 主な機能
RFC-2617 の機能のうち、以下についてはまだ実装されていません。
設計の概要このアダプタはふたつのサブコンポーネントで構成されています。 ひとつは HTTP 認証クラス自身、そしてもうひとつはいわゆる "リゾルバ" です。 HTTP 認証クラスは、ベーシック認証およびダイジェスト認証を扱うロジックをカプセル化します。 このクラスは、リゾルバを使用してなんらかの保存データ (デフォルトはテキストファイル) からクライアントの ID を探します。認証データが "解決" されると、クライアントから送信された値に基づいて認証が成功したかどうかを判断します。 設定オプションZend_Auth_Adapter_Http クラスのコンストラクタには、 設定配列を渡す必要があります。使用可能なオプションはいくつかあり、 その中には必須のものもあります。
リゾルバリゾルバの仕事は、ユーザ名とレルムを受け取って何らかの証明を返すことです。 ベーシック認証では、ユーザのパスワードを Base64 でエンコードしたものを受け取ります。 ダイジェスト認証では、ユーザ名、レルムおよびパスワード (をコロンでつなげたもの) のハッシュを受け取ります。 現在サポートしているハッシュアルゴリズムは MD5 のみです。 Zend_Auth_Adapter_Http Zend_Auth_Adapter_Http_Resolver_Interface を実装したオブジェクトを使用しています。 このアダプタにはテキストファイル用のリゾルバクラスが含まれていますが、 リゾルバインターフェイスを実装することで、 その他のリゾルバも簡単に作成できます。 File リゾルバファイルリゾルバは、非常にシンプルなクラスです。 ファイル名を指定するプロパティを保持しており、 コンストラクタでこれを指定できます。 resolve() メソッドはテキストファイルを走査し、 ユーザ名とレルムにマッチする行を探します。テキストファイルのフォーマットは Apache の htpasswd ファイルと似た形式で
のようになります。個々の行は ユーザ名、レルムおよび認証情報の三つのフィールドで構成されており、 それらがコロンで区切られています。リゾルバは認証情報フィールドの内容を理解することはできません。 取得した値をそのまま呼び出し元に返します。したがって、 同じ形式でベーシック認証およびダイジェスト認証の両方に対応できます。 ベーシック認証では、このフィールドは平文テキストで書く必要があります。 ダイジェスト認証では、これは先ほど説明したような MD5 ハッシュとなります。 ファイルリゾルバを作成する方法は次の二通りで、どちらも同じくらい簡単です。まずは
もうひとつは
指定したパスが空だったり読み込みできなかったりした場合は、 例外をスローします。 基本的な使用法まず、必須設定項目を含む配列を作成します。
この配列は、アダプタに対してベーシック認証およびダイジェスト認証の両方を受け付けるように指定します。 また、/members_only および /my_account の配下では認証済みアクセスが必要となるようにします。 realm の値は、通常はブラウザのパスワードダイアログボックスに表示されます。 nonce_timeout は、もちろん、先ほど説明したとおりの振る舞いをします。 次に、Zend_Auth_Adapter_Http オブジェクトを作成します。
ベーシック認証およびダイジェスト認証の両方をサポートしているので、 ふたつのリゾルバオブジェクトを作成する必要があります。 これは、単にふたつの異なるクラスを作成するだけの簡単なことです。
最後に、認証を行います。このアダプタは、 リクエストオブジェクトおよびレスポンスオブジェクトの両方を参照する必要があります。
|