回答:
ライブラリ全体をインポートすることは、必要なものが本質的に2行のコードである場合は非効率的です...
$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
// log them in!
} else {
// error message
}
ldap_set_option
して、別の方法で動作させることができる場合があります。おそらくプロトコルのバージョンを設定していますか?実験する必要があります。安全のため、とにかく空のパスワードをチェックすることをお勧めします。
ldap_bind
処理するため、特殊文字は問題になりません。
ライブラリを必要とせずに、Active Directoryでユーザーを認証するだけで、PHPでLDAPを使用するかなり単純なプロセスであると考えるでしょう。しかし、それをかなり速く複雑にすることができる多くのものがあります:
ほとんどの場合、上記をサポートするLDAPライブラリを使用する方が実際には簡単です。最終的に、上記のすべてのポイントを処理する独自のライブラリをロールバックすることになりました。次のように使用できます。
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を使用せずに信頼できるセキュリティリスクであるため、いくつかの追加情報を提供する必要が十分にありました。
ldaps://
接続にこのフォーマットを使用することは非推奨です。私の例では、指定するsetUseTls(true)
とldap://
フォーマットが使用され、を使用してStartTLSが発行されますldap_start_tls($connection)
。したがって、TLS自体は廃止されていません。使用して接続するだけですldaps://
(実際には完全に異なるポートを介してLDAPに接続します)。
これを行うには、ユーザー資格情報を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 = 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の両方のドメインコントローラーへの接続をテストしました。