1

PHP Web アプリケーションがあります。ユーザーがそれを開くと、Windows システムのログイン ID を取得する必要があります。ユーザーを再度認証しません。

Active Directory について聞いたことがありますが、ユーザーを再度認証する必要はありません。Web アプリケーションを開くと、ユーザー名が自動的に取得されます。

PHP スクリプトでログイン ID を取得するにはどうすればよいですか?

mod_ntlm 環境や REMOTE_USER 変数などのために Apache サーバーを構成することも聞いたことがありますが、それらすべてを知っているわけではありません。先に進んでそれらすべてを構成できるように、非常に簡単に言えますか?

4

3 に答える 3

2

内部 LAN のみで実行され、ネットワーク上のすべての Windows マシンが SBS または本格的な Windows Active Directory に対して認証される場合、LDAP クエリを使用してページを閲覧しているユーザーのログインをクエリできます。私はこれを何年も前にイントラネットで行いました。非常に信頼性が高いですが、Windows ドメインに対して認証された内部ユーザーに対してのみ機能します。

基本 LDAP クエリ

    <?php

    // basic sequence with LDAP is connect, bind, search, interpret search result,
    // close connection

    $ds=ldap_connect("192.168.0.1");        // ! Your LDAP/Active Direcotry Server !
    echo "Connection: ".$ds."";

    if ($ds) {
            echo "Binding ..";
            $r=ldap_bind($ds);        // this is an "anonymous" bind, typically read-only access
            echo "Bind result is ".$r."";
            echo "Searching for (sn=A*) .."; // this example searches surname entry for all surnames starting with A
            $sr=ldap_search($ds,"o=Organisation Name, c=UK", "sn=A*"); // ! must use real base dn here !
            echo "Search result is ".$sr."";
            echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."";
            echo "Getting entries ...";
            $info = ldap_get_entries($ds, $sr);
            echo "Data for ".$info["count"]." items returned:";

            for ($i=0; $i<$info["count"]; $i++) {
               echo "dn is: ". $info[$i]["dn"] ."";
               echo "first cn entry is: ". $info[$i]["cn"][0] ."";
               echo "first email entry is: ". $info[$i]["mail"][0] ."";
            }
    //now  close connection
    ldap_close($ds);
} else {
    echo "Unable to connect to LDAP server";
}
?>
于 2013-03-04T12:54:55.687 に答える
0

Web アプリケーションが Windows のログイン ID を取得できるかどうかは非常に疑問です。これはかなり深刻なセキュリティ上の問題です。

于 2013-03-04T12:52:24.893 に答える
0

私の知る限り、ユーザーのIPを保存し、それを使用して(一度認証した後)自動的にログインすることが最善の方法です。ユーザーの IP は $_SERVER['REMOTE_ADDR'] から取得できます。

ただし、IP はなりすましの可能性があり、変更される可能性があるため (頻繁に、場合によってはまれに)、誰かを自動的にログインさせる安全性や信頼性の高い方法ではないことに注意してください。ただし、アプリケーションの性質によっては、それで十分な場合があります。特に、イントラネットでのみ使用している場合 (この場合、必要に応じて静的 IP を設定できます)。

于 2013-03-04T13:10:05.563 に答える