個人的なプロジェクトの助けを借りて、自分自身を教えてください!PHP LDAP複数のバインド
シンプルなログインボックスを使用して、私たちのウェブサイトの特定のページをパスワードで保護したいと考えています。
マイlogin.phpページはユーザ名とパスワード入力を備えたシンプルなログインフォームが含まれています。私は下のコードを使ってログインプロセスを動かすことができました。 Active Directoryのユーザー名/パスを使用してこのフォームからログインし、問題のないページに進むことができます。
しかし私はそれを「正しい」方法でやっているかどうかはわかりません。
マイコード;
ldap.php
session_start();
function authenticate($user, $password) {
if(empty($user) || empty($password)) return false;
$ldaphost = "ad.example.com";
$ldap_dn = "DC=ad,DC=example,DC=com";
$ldap_user_group = "Staff";
$ldap_usr_dom = '@ad.example.com';
$ldap = ldap_connect($ldaphost);
if($bind = ldap_bind($ldap, $user.$ldap_usr_dom, $password) or die ("Error: ".ldap_error($ldap))) {
$filter = "(sAMAccountName=".$user.")";
$attr = array("");
$result = ldap_search($ldap, $ldap_dn, $filter) or exit("Unable to search LDAP server") or die ("Error searching: ".ldap_error($ldap));
$entries = ldap_get_entries($ldap, $result);
ldap_unbind($ldap);
}
foreach($entries[0]['memberof'] as $grps) {
if(empty($grps) || empty($ldap_user_group)) return false;
if(strpos($grps, $ldap_user_group)) {
$access = 1;
} else {
}
}
if($access != 0) {
$_SESSION['user'] = $user;
$_SESSION['access'] = $access;
return true;
} else {
return false;
}
}
私は次のように、この特定のLDAP認証プロセスは、二段階で動作する必要があること(他の誰かが)と言われてきました。
- 入力したユーザー名が検索されます。このために検索ユーザーDNとパスワード(検索権限を持つユーザー)を使用することをお勧めします。検索を行う前に、これらの資格情報とバインドされます。検索が成功すると、検索されたユーザーのDNと後でメンバーレコードを検索するために使用される検索属性が取得されます。
- 次に、取得されたユーザーDNと入力されたパスワードを使用して2番目のバインドが作成されます。このバインドが成功すると、ユーザーは認証されます。
私の質問は次のとおりです。
- 上記の記述は正しいですか?
- 2つの「バインド」が必要ですか?
- ユーザーが入力した資格情報でLDAP接続をバインドすることはできませんか? 何かアドバイスが高く評価され
、私は本当に、認証プロセスのラウンド私の頭を取得するために苦労しています。■
これはあなたのスライドは非常に役立ちます - 私は以前の笑としている可能性があります:) –