0

おはようございます、

LDAP 認証 (以下のコード) を提供する php スクリプトがありますが、複数のコンテキストに対して認証する必要があります。

私はこれについて最善の方法がわからなかったので、誰かが何か指針/アドバイスを持っているのではないかと思いました.

敬具、ベン

$username = $_POST["username"];
$password = $_POST["password"];

//$ipaddressreceived = $_POST["ipaddress"];
$ldapcontext = "ou=Staff, ou=Users,o=ABC";
$ldapconn = ldap_connect("IPADDRESS");  // must be a valid LDAP server!
$ldaprdn = "cn=$username,$ldapcontext";

function authenticate($username, $password) {

        global $ldapconn;
        global $username;
        global $password;
        global $ldaprdn;
        // Prevent null binding
        if ($username === NULL || $password === NULL) { return false; } 
        if (empty($username) || empty($password)) { return false; }

        // Bind as the user        
        $ldapbind = ldap_bind($ldapconn, $ldaprdn, $password);;
        if ($ldapbind) { $ret = true;
        } else {
            $ret = false;
        }

        return $ret;
    }

$authUser=authenticate($username, $password);

if ($authUser == true) {


    session_start();
    $_SESSION["username"]=$username;

    $ldapfields = array("cn", "givenname", "sn", "mail");

    $ldapsearch=ldap_search($ldapconn, "$ldapcontext", "cn=$username", "$ldapfields");  
    $info = ldap_get_entries($ldapconn, $ldapsearch);

    $givenname =  $info["sn"][0];

    $_SESSION["givenname"]=$givenname;

    $login_message = "LOGIN SUCCESSFUL";

    header("Location: index.php");
    exit;

    } else
    {
    $login_message = "Login Failed";

    }
4

2 に答える 2

0

ネーミング コンテキストは、ルート DSE 内のサーバーによって公開されます (ただし、この情報は保護される場合があります)。namingContextsルート DSE から多値属性を要求することを検討してください。

こちらもご覧ください

于 2013-02-21T14:20:58.283 に答える
0

私があなたの質問を理解している限り、 contextだけでなくjondoecontextからも認証できるようにしたいと考えています。ou=Staff,ou=Users,o=ABCjanedoeou=Externals,ou=Others,o=ABC

私の目には、ユーザー名が LDAP 全体で一意である限り、2 つの可能なアプローチがあります。

まず、可能なすべてのコンテキストを配列に追加し$contexts、次にこれらのコンテキストをループして一致するユーザーを見つけることができます。

次に、LDAP 全体でユーザー名を使用してユーザーを検索し、返さdnれた値を使用して LDAP に対してユーザーを認証する 2 段階のアプローチを使用します。

複数の search-base を指定して 2 つのアプローチを組み合わせ、 users を検索するステップでこれらを反復処理することもできますdn。ユーザーを見つけるとすぐに、dnとパスワードを使用して認証できます。

実装例はhttps://github.com/heiglandreas/authLdap/blob/master/ldap.php#L222にあります。

于 2013-02-22T05:49:45.980 に答える