LDAP コンテナ
このストレージコンテナは、ldap 拡張モジュールを使用して
LDAP サーバからユーザのデータを読み込みます。
Auth コンストラクタ()
でのこのストレージ固有のオプションは、オプションの配列です。
使用可能なオプション
オプション |
データ型 |
デフォルト値 |
説明 |
"host"
|
string
|
"localhost"
|
アクセスするホスト名あるいは IP アドレス。
|
"port"
|
integer
|
389
|
アクセスする LDAP サーバのポート。
|
"url"
|
string
|
"
|
プロトコル、URL およびポートを指定した、接続先の完全な URL。
ldaps:// を指定すると便利です。これは、
"host" および "port" の設定より優先します。
PHP が OpenLDAP 2+ ライブラリと組み合わせてコンパイルされている場合にのみ使用可能です。
|
"version"
|
integer
|
2
|
使用する LDAP のバージョン。通常は 2 (デフォルト) あるいは 3
です。整数型でなければなりません!
|
"referrals"
|
boolean
|
TRUE
|
LDAP サーバから返される照会 (referral) 情報に自動的に従うかどうかを設定します。
|
"binddn"
|
string
|
"
|
設定されている場合は、まずこのユーザでバインドしてからユーザの検索を始めます。
設定されていない場合は、匿名バインドを使用します。
これにより、MS アクティブディレクトリでこのコンテナが動作するようになると言われていますが、
この方式で設定されているサーバなら、他のものでも動作するでしょう。
現時点では、これは完全な dn でなければなりません
(basedn と userdn は連結されません)。
|
"bindpw"
|
string
|
"
|
binddn でバインドする際に使用するパスワード。
|
"basedn"
|
string
|
"
|
サーバのベース DN。
|
"userdn"
|
string
|
"
|
ユーザを検索する際に、basedn の前に付加されます。
|
"userscope"
|
string
|
"sub"
|
ユーザを検索する際の範囲。one、sub (デフォルト) あるいは base のいずれか。
|
"userattr"
|
string
|
"uid"
|
検索する属性を指定します。
|
"userfilter"
|
string
|
"(objectClass=posixAccount)"
|
検索に使用するフィルタ。
(&(userattr=username)(userfilter))
のように用いられます。
|
"attributes"
|
array
|
array('')
|
エントリから取得する追加の属性の配列。これらは認証データに追加され、
Auth::getAuthData()
で取得できるようになります。空の配列を指定するとすべての属性を取得し、
array('') (デフォルト) を指定すると何も取得しません。この配列の値として
'dn' を追加すると、バインドに使用するユーザの DN が認証データに追加されます。
|
"attrformat"
|
string
|
"AUTH"
|
'attributes' オプションで定義した追加データを返す際の書式。
次の二種類が使用可能です。
LDAP は、データを多次元の配列で返します。各配列は 'count'
という要素から始まり、そこでエントリ内の属性の数か
あるいは属性内の値の数を提供します。この書式を指定すると、
Auth オブジェクトからデータを取得する手段は
getAuthData('attributes') だけとなります。これは、
1.3.0 より前のバージョンでのデフォルトの書式です。
AUTH は、他の Auth コンテナにより近い形式でデータを返します。
各属性の要素には、Auth の
getAuthData() メソッドを直接コールしてアクセス可能です。
1.3.0 以降、これがデフォルトとなりました。
|
"groupdn"
|
string
|
"
|
グループを検索する際に、basedn の前に付加されます。
|
"groupattr"
|
string
|
"cn"
|
検索するグループの属性を指定します。
|
"groupfilter"
|
string
|
"(objectClass=groupOfUniqueNames)"
|
グループの検索の際に、検索フィルタに追加されるフィルタ。
(&(groupattr=group)(memberattr=username)(groupfilter))
のように用いられます。
|
"memberattr"
|
string
|
"uniqueMember"
|
ユーザの dn を探す対象となる、グループオブジェクトの属性。
|
"memberisdn"
|
boolean
|
TRUE
|
memberattr がユーザの dn (デフォルト) であるか、それとも
userattr (通常は uid) であるか。
|
"group"
|
string
|
"
|
認証に成功するために、ユーザが所属していなければならないグループの名前。
|
"groupscope"
|
string
|
"sub"
|
グループを検索する際の範囲。one、sub (デフォルト) あるいは base のいずれか。
|
"start_tls"
|
boolean
|
"false"
|
START_TLS 暗号化接続の使用を有効/無効にします。
|
"try_all"
|
boolean
|
FALSE
|
認証処理の検索で複数のエントリが返された場合に、
すべてのエントリを順に試すかあるいは最初のエントリだけを試す (デフォルト) か。
|
"debug"
|
boolean
|
FALSE
|
デバッグ出力を有効にします。
|
<?php
$a1 = new Auth("LDAP", array(
'host' => 'localhost',
'port' => '389',
'version' => 3,
'basedn' => 'o=netsols,c=de',
'userattr' => 'uid',
'binddn' => 'cn=admin,o=netsols,c=de',
'bindpw' => 'password'
));
?>
<?php
$a2 = new Auth('LDAP', array(
'url' => 'ldaps://ldap.netsols.de',
'basedn' => 'o=netsols,c=de',
'userscope' => 'one',
'userdn' => 'ou=People',
'groupdn' => 'ou=Groups',
'groupfilter' => '(objectClass=posixGroup)',
'memberattr' => 'memberUid',
'memberisdn' => false,
'group' => 'admin'
));
?>
Microsoft Active Directory サーバに対する認証
<?php
$a3 = new Auth('LDAP', array(
'host' => 'ldap.netsols.de',
'port' => 389,
'version' => 3,
'referrals' => false,
'basedn' => 'dc=netsols,dc=de',
'binddn' => 'cn=Jan Wagner,cn=Users,dc=netsols,dc=de',
'bindpw' => 'password',
'userattr' => 'samAccountName',
'userfilter' => '(objectClass=user)',
'attributes' => array(''),
'group' => 'testing',
'groupattr' => 'samAccountName',
'groupfilter' => '(objectClass=group)',
'memberattr' => 'member',
'memberisdn' => true,
'groupdn' => 'cn=Users',
'groupscope' => 'one',
));
?>
Microsoft ActiveDirectory サーバを使用する場合は、
'userattr' として 'samaccountname' を指定し、次の特殊なルールに基づいて
ActiveDirectory のディレクトリ名を 'basedn' に変換する必要があります。
ActiveDirectory ドメイン (DNS 名とは関係ありません) "win2000.example.org"
の ActiveDirectory サーバ上にあるデフォルトの 'Users' フォルダの
'basedn' は、"CN=Users, DC=win2000, DC=example, DC=org"
となります。ドメイン名は、すべて DC 属性となります。
独自のユーザフォルダを使用する場合は、"CN=Users" の部分を
"OU" 属性のつながりに変換します。これは、独自のフォルダへのパスを
逆順にしたものとなります。つまり、ActiveDirectory フォルダ
"win2000.example.org\Custom\Accounts" は、
"OU=Accounts, OU=Custom, DC=win2000, DC=example, DC=org" となります。
アクティブディレクトリへの匿名バインドは許可されていないようです。
そのため、ユーザを検索する際には binddn および bindpw
を設定する必要があります。
AD では、LDAP Referral を false に設定しておく必要があります。
さらに、もし MS LDAP サーバに対して暗号化接続を行いたいのなら、
ウェブサーバ上の /etc/ldap/ldap.conf あるいはウェブサーバのユーザの
~/.ldaprc (設定によっては読み込めないかもしれません) の中で
"TLS_REQCERT never" を指定しなければならないことに注意しましょう。