6

以下のコードは、ldap に対してユーザーの資格情報をチェックします。

<?php
$ldaphost = "ldap.domain.com";
$ldapport = 389;

$ds = ldap_connect($ldaphost, $ldapport)
or die("Could not connect to $ldaphost");

if ($ds) 
{
    $username = "johndoe@domain.com";
    $upasswd = "pass";

    $ldapbind = ldap_bind($ds, $username, $upasswd);

    if ($ldapbind) 
        {print "Congratulations! $username is authenticated.";}
    else 
        {print "Access Denied!";}
}
?>

私のユーザーは Firefox と IE を使用しており、それらが ActiveDirectory 資格情報をシームレスに渡すことができることを知っています。

AD グループをチェックして、そのユーザー名がそこにあるかどうかを確認したいだけです。見つかった場合はページを表示し、そうでない場合は資格情報の入力を求めます。

ユーザーは既にドメイン コントローラーにログインしているため、ユーザー名を取得し、特定のグループで見つかったかどうかを確認してから、ユーザーに資格情報の入力を求めます。これはどのように可能ですか?

4

2 に答える 2

8

IIS を Web サーバーとして使用するという事実を考えると、目的を達成するために PP コードから Active Directory サーバーと通信する必要は実際にはありません。

ここでのキーワードはIntegrated Windows Authenticationです。これがdjnが探していた表現です。このオプションが有効になっている (そして匿名アクセスが拒否されている) 場合、IIS は、提供された資格情報を Active Directory および要求されたリソースの NTFS ファイル システム権限に対してチェックします。したがって、単純な NTFS アクセス制御メカニズムを使用して、ファイルへのアクセスを制御できます。

ユーザーが IE を使用している場合、資格情報を入力する必要さえありません。これは、いわゆるSPNEGO (Simple and Protected GSSAPI Negotiation Mechanism) とその基礎となるメカニズム(クライアントとサーバーの機能に応じてKerberosまたはNTLMSSP ) を介して自動的に行われるためです。処理。

私が知る限り、Firefox は Windows ログオン資格情報をサーバーに自動的に渡すこともできます。この機能を有効にするには、構成オプションを調整するだけです。この情報が Firefox 3.5.x でも有効かどうかはわかりません。

*nix システムで Apache を実行している場合は、統合 Windows 認証のようなシステムを処理するためにサーバー側モジュールに頼る必要があります。可能なオプションは次のとおりです(実際にまだ維持されているか安定しているかはわかりません):

Windows 上の Apache には、次のものがあります。

  • mod_ntlm(時代遅れ; 上記と同じではありませんmod_ntlm)
  • mod_auth_sspi( の後継者mod_ntlm

これらのモジュールのほとんどは非常に古いように見えることに注意してください。

于 2009-10-07T09:22:29.030 に答える
1

ちょうど今、同様のセットアップに取り組んでいます: 私は Web サーバーが AD でクライアントを認証してからクライアントを認証する LDAP のすべてをスキップしました (申し訳ありませんが、これが M$ 代替ユニバースで何と呼ばれているか思い出せません)。

クライアントが PHP スクリプトに到達した場合、彼は AD にいて、私は彼のユーザー名を in$_SERVER["AUTH_USER"]と in$_SERVER["LOGON_USER"]の両方に持っています。それ以外の場合、クライアントはスクリプトに到達しません。

于 2009-10-06T22:27:24.573 に答える