PHP:LDAP認証を利用する際の注意点
PHPには、LDAP関数が用意されていて、LDAP認証を利用できます。
www.php.net
ldap_connect関数でLDAPサーバーに接続のための引数が妥当か確認し、ldap_bind関数で実際に接続します。
www.php.net
www.php.net
ldap_bind関数の戻り値が、成功のtrueになかなかなりませんでした。
SambaのLDAP認証のセキュリティが、初期値で強化されている
ldap_bind関数に記載されていたサンプルコードをそのまま利用して試していて、ldap_bind関数でfalseが戻されるのがわからなかったので、以下のように修正して原因を調べました。
// ldap サーバーにバインドする $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); echo "ldap_error: " . ldap_error($ldapconn) ; // 追加 ldap_get_option($ldapconn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $err); // 追加 echo "ldap_get_option: " . $err; // 追加
結果は、
ldap_error: Strong(er) authentication required
ldap_get_option: BindSimple: Transport encryption required.
と表示されました。
ldap_bind Strong(er) authentication required で検索したところ、以下のページが見つかりました。
wiki.samba.org
Sambaのアップデートにより、LDAPの認証が、ポート番号389を使った認証から、ポート番号636を使ったLDAPSの認証が初期値になっているのがわかりました。
LDAPSでの認証をするには、なんらかの追加の設定が必要だと判断し、LDAP関数の使い方を学んでいる現状では、設定作業の手間を省きたいので、LDAPで認証できるように設定を変更しました。
設定方法はこちらの記事の通りですが、smb.confのglobalセクションに、設定を追加しました。
www.rough-and-cheap.jp
[global] client ldap sasl wrapiping = plain ldap server require strong auth = no
ドメインの指定が必要
smb.confの設定を変更後に試すと、結果が変わりました。
ldap_error: Invalid credentials
ldap_get_option: 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
AcceptSecurityContext error, data 52e, v1db1 で検索したところ、$ldaprdnの値を、ユーザー名ではなく、ユーザー名@ドメイン名にすれば解決するという情報がありました。
$ldaprdnの値を、ユーザー名@ドメイン名に変更したところ、ldap_bind関数の戻り値が、成功のtrueになりました。
LDAP関数について、まだまだ学んでいきます。