111

PHPを使用してLDAPを介してユーザーを認証する方法を探しています(Active Directoryがプロバイダーです)。理想的には、IIS 7 で実行できる必要があります ( adLDAPは Apache で実行します)。似たようなことをして成功した人はいますか?

  • 編集:すぐに使えるコードを備えたライブラリ/クラスを好む...誰かがすでにそうしているときに車輪を発明するのはばかげている.
4

6 に答える 6

175

基本的に 2 行のコードだけが必要な場合、ライブラリ全体をインポートするのは効率が悪いように思えます...

$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
  // log them in!
} else {
  // error message
}
于 2008-10-05T14:10:07.097 に答える
19

Active Directory で単純にユーザーを認証することは、ライブラリーを必要とせずに PHP で LDAP を使用する非常に単純なプロセスだと思うかもしれません。しかし、それを非常に速く複雑にする可能性のあるものがたくさんあります。

  • 入力を検証する必要があります。それ以外の場合は、空のユーザー名/パスワードが渡されます。
  • バインド時にユーザー名/パスワードが適切にエンコードされていることを確認する必要があります。
  • TLS を使用して接続を暗号化する必要があります。
  • 1 台がダウンした場合の冗長性のために、個別の 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...
}

上記の認証呼び出しは次のようになります。

  • ユーザー名もパスワードも空でないことを確認します。
  • ユーザー名/パスワードが適切にエンコードされていることを確認します (デフォルトでは UTF-8)。
  • いずれかがダウンした場合に備えて、代替 LDAP サーバーを試してください。
  • TLS を使用して認証要求を暗号化します。
  • 失敗した場合は、追加情報を提供してください (つまり、アカウントのロック/無効化など)。

これを行う他のライブラリもあります (Adldap2 など)。ただし、最も賛成票が投じられた回答は、実際には、入力の検証が行われず、TLS を使用しない場合に依存するセキュリティ リスクであるため、いくつかの追加情報を提供する必要があると感じました。

于 2016-04-09T20:55:58.850 に答える
12

これを行うには、ユーザー資格情報を ldap_bind() に渡すだけです。

http://php.net/manual/en/function.ldap-bind.php

アカウントが LDAP にバインドできる場合、それは有効です。できない場合は、そうではありません。認証だけを行っている (アカウント管理ではない) 場合、ライブラリは必要ないと思います。

于 2008-10-05T13:38:49.297 に答える
9

私はZend_Ldapクラスが好きです。Zend フレームワークなしで、プロジェクトでこのクラスのみを使用できます。

于 2008-10-05T05:21:13.560 に答える
6

PHP にはライブラリがあります: http://ca.php.net/ldap

PEAR にはいくつかのパッケージもあります: http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

私はどちらも使用していませんが、ある時点で使用するつもりでした。

于 2008-10-05T05:01:35.923 に答える
5

完全な例をお探しの方は、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 の両方のドメイン コントローラーに接続することをテストしました。

于 2014-01-08T19:09:39.037 に答える