PHPを使用してLDAPを介してユーザーを認証する方法を探しています(Active Directoryがプロバイダー)。理想的には、IIS 7で実行できるはずです( adLDAP はApacheで実行します)。誰もが似たようなことをして成功しましたか?
必要なのが本質的に2行のコードだけである場合、ライブラリ全体をインポートするのは非効率的です...
$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
// log them in!
} else {
// error message
}
単にActive Directoryでユーザーを認証することは、ライブラリを必要とせずにPHPでLDAPを使用する非常に簡単なプロセスだと思うでしょう。しかし、それをかなり速く複雑にすることができる多くのことがあります:
実際、ほとんどの場合、上記をサポートするLDAPライブラリを使用する方が簡単です。最終的に、上記のすべてのポイントを処理する独自のライブラリを公開しました。 LdapTools (認証だけでなく、もっと多くのことができます)。次のように使用できます。
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
上記の認証呼び出しは:
これを行う他のライブラリもあります(Adldap2など)。ただし、最も多くの回答が得られたのは、実際には入力検証を行わず、TLSを使用しない場合に依存するセキュリティリスクであるため、追加情報を提供するのに十分であると感じました。
これは、ユーザー資格情報をldap_bind()に渡すだけで簡単に行えます。
http://php.net/manual/en/function.ldap-bind.php
アカウントがLDAPにバインドできる場合、それは有効です。できない場合、そうではありません。アカウント管理ではなく認証のみを行う場合、ライブラリの必要性はわかりません。
Zend_Ldap クラスが好きです。ZendFrameworkなしで、このクラスのみをプロジェクトで使用できます。
PHPにはライブラリがあります: http://ca.php.net/ldap
PEARには多くのパッケージもあります。 http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=
私もどちらも使いませんでしたが、私はある時点で行って、彼らはうまくいくように見えました。
完全な例を探している人は、 http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ をチェックしてください。
Windows Server 2003 Webサーバー(IIS6)およびIIS 8を実行しているWindows Server 2012エンタープライズからWindows Server 2003およびWindows Server 2008 R2ドメインコントローラーへの接続をテストしました。