Cosminexus V9 アプリケーションサーバ Cosminexus HTTP Server

[目次][用語][索引][前へ][次へ]

4.5.4 ディレクトリサービスを利用したユーザ認証とアクセス制御

ディレクトリサービス(以降,LDAPサーバと呼びます)と連携して,パスワードファイルを作成しないでユーザ認証ができます。また,LDAPサーバ内の属性でアクセス制御ができます。

この機能は,HP-UX(IPF)版では使用できません。

<この項の構成>
(1) mod_hws_ldapモジュールの組み込み
(2) LDAPサーバでの認証方法
(3) LDAPサーバでのアクセス制御
(4) ユーザ認証とアクセス制御の関係
(5) 複数のLDAPサーバでユーザ認証

(1) mod_hws_ldapモジュールの組み込み

LDAPサーバを利用したユーザ認証を使用するためにはmod_hws_ldapモジュールの組み込みが必要です。mod_hws_ldapモジュールを組み込むには,コンフィグファイル(httpsd.conf)に次に示すディレクティブを指定します。

(2) LDAPサーバでの認証方法

ユーザ認証する場合,<Directory>,.htaccessにはパスワードファイルを使用した場合と同様に,AuthTypeディレクティブとAuthNameディレクティブを指定します。また,Require valid-userとLDAPRequireディレクティブを指定することで,LDAPサーバと連携したユーザ認証ができます。

<Application Serverのインストールディレクトリ>/httpsd/cgi-bin/のCGIを使用する場合に,ユーザIDとパスワードを入力させて認証する例を次に示します。

(例)
 
LDAPServerName ldap.server.hitachi.com
LDAPServerPort 389
<Directory "<Application Serverのインストールディレクトリ>/httpsd/cgi-bin">
AuthName LDAP-TASK
AuthType Basic
Require valid-user
LDAPRequire
</Directory>
 

LDAPサーバ内の属性でアクセス制御もできます。

例えば,社員登録番号が100番から200番のユーザだけアクセスを許可することもできます。詳細についてはLDAPRequireディレクティブを参照してください。

(3) LDAPサーバでのアクセス制御

認証されたユーザが,該当コンテンツを利用できるかどうかを定義できます。

 
LDAPRequire 〔%DN属性%〕 〔LDAP検索フィルタ

LDAP検索フィルタに,LDAPサーバに登録されている情報を基に,アクセス権限について定義します。

例えば,認証されたユーザの中でtaroとhanakoだけをアクセスさせたい場合には,次のように定義します。定義した情報は,あらかじめLDAPサーバ内に登録してください。

(例)

 
LDAPRequire %cn% (|(cn=taro)(cn=hanako))
 

(4) ユーザ認証とアクセス制御の関係

LDAPサーバにユーザ名がcnとして登録されている場合を例に説明します。SSLクライアント認証とLDAPRequireディレクティブを組み合わせた場合,証明書による認証後,LDAPサーバにクライアントが登録されているかどうかを確認します。このとき,クライアント証明書内のサブジェクトのCommon Name(CN)をユーザ名として扱い,パスワードを使用しない匿名アクセスとしてLDAPサーバにアクセスし確認します。LDAPサーバにアクセスできなかった場合は,ステータスコード500 Internal Server Errorを応答します。

ユーザ認証とアクセス制御の関係を次の図に基づいて説明します。

図4-5 ユーザ認証とアクセス制御の関係

[図データ]

(a) LDAPサーバによる認証
  1. LDAPサーバでの認証をするためには,各ユーザが登録されているDN(認証するユーザが登録されているエントリ:ou=member,o=hitachi,c=jpなど)を,あらかじめLDAPBaseDNディレクティブに定義しておきます。
  2. LDAPRequireディレクティブが定義されたコンテンツをアクセスする場合,クライアントをこのDN内の情報を使って認証します。Webブラウザ上にユーザ名とパスワードの入力を要求する画面が表示されます。
  3. ユーザ名,パスワードを入力すると,cn=ユーザ名とLDAPBaseDNディレクティブに定義したDNを組み合わせて,認証するユーザのDNを作成して,パスワード認証します。この場合,ユーザのDNはcn=TARO,ou=member,o=hitachi,c=jpになります。
  4. LDAPサーバのDNに登録されたパスワードと,クライアントが入力したパスワードが一致しなければ,このユーザに対してステータスコード401 Authorization Requiredを応答し,アクセスを拒否します。
  5. パスワードが一致してもLDAPRequireディレクティブにLDAP検索フィルタの指定がある場合は,検索フィルタの記述とユーザのDNが一致するかどうかを判断します。
  6. 一致していればアクセスを許可します。cn=JIROはパスワードが一致していても,検索フィルタの記述には一致しないため,LDAPNoEntryStatusディレクティブに従ったステータスコード(デフォルトでは401 Authorization Required)を応答し,アクセスを拒否します。
(b) SSLクライアント証明書がある場合
  1. クライアント(Webブラウザ)からアクセスするときに,SSLクライアント証明書を受け付けた場合には,LDAPサーバでは認証しません。SSLで認証します。
  2. LDAPRequireディレクティブを定義した場合には,LDAPサーバをアクセスして,アクセス制御します。
    クライアント証明書のサブジェクトのCommon Name(CN)を,クライアントの名前としてLDAPサーバを検索します。CNがLDAPサーバにない場合,ステータスコード401 Authorization Requiredを応答します。
  3. クライアント証明書のCNがLDAPサーバにある場合,検索フィルタを使って,このフィルタに一致するかどうか確認します。検索フィルタが(|(cn=TARO)(cn=HANAKO))の場合,証明書のCNがTAROであれば検索フィルタに一致するのでアクセスできます。また,CNがJIROの場合は,検索フィルタに一致しないため,LDAPNoEntryStatusディレクティブに従ったステータスコード(デフォルトでは401 Authorization Required)を応答し,アクセスを拒否します。
    LDAPサーバには必ずユーザを区別するためのcnがあり,これと証明書のCNが一致していると仮定して動作するため,この規則を基にSSLクライアント証明書を作成してください。

(5) 複数のLDAPサーバでユーザ認証

LDAPサーバは並列に複数指定できます。そのため,異なるユーザが登録されているLDAPサーバを併用してユーザ認証ができます。また,ディレクトリ単位にも指定できるため,コンテンツごとにLDAPサーバを変更できます。

(a) LDAPサーバの複数指定

LDAPServerName,LDAPServerPortおよびLDAPBaseDNディレクティブに複数のLDAPサーバに対応したサーバ名,ポート番号およびDNを指定できます。最初に指定したLDAPサーバの優先度が最も高く,指定した順に優先度は低くなります。

(b) ディレクトリ単位にLDAPサーバを指定

次に示すLDAP関連のディレクティブはディレクトリ単位に指定できます。指定したディレクティブはhttpsd.conf,<VirtualHost>,<Directory>の順に上位ディレクトリから下位ディレクトリへ継承します。

ディレクトリ単位に指定できるLDAP関連ディレクティブ
  • LDAPServerName
  • LDAPServerPort
  • LDAPTimeout
  • LDAPBaseDN