PHPを使用してLDAPを介してユーザーを認証する方法を探しています(Active Directoryがプロバイダーです)。理想的には、IIS 7 で実行できる必要があります ( adLDAPは Apache で実行します)。似たようなことをして成功した人はいますか?
- 編集:すぐに使えるコードを備えたライブラリ/クラスを好む...誰かがすでにそうしているときに車輪を発明するのはばかげている.
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クラスが好きです。Zend フレームワークなしで、プロジェクトでこのクラスのみを使用できます。
PHP にはライブラリがあります: http://ca.php.net/ldap
PEAR にはいくつかのパッケージもあります: http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0
私はどちらも使用していませんが、ある時点で使用するつもりでした。
完全な例をお探しの方は、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 の両方のドメイン コントローラーに接続することをテストしました。