ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

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

認証
Free Stock photos by Vecteezy

ドメインの指定が必要

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関数について、まだまだ学んでいきます。