2

Web アプリケーション内からクライアント マシン上のユーザーの ActiveDirectory 資格情報を取得することは可能ですか?

明確にするために、クライアントのイントラネットでホストされる Web アプリケーションを設計しています。

アプリケーションにアクセスするときに、アプリケーションのユーザーに資格情報の入力を求めないようにする必要があります。代わりに、クライアント マシンにログオンしているユーザーの資格情報を、ユーザーの操作なしで自動的に取得する必要があります。

4

4 に答える 4

5

絶対。これは、イントラネット アプリケーションで特に役立ちます。

環境を指定しなかったので、.NET であると仮定しますが、もちろんそれが唯一の方法ではありません。

Active Directory はLDAPを使用して簡単に照会できます。.NET を使用している場合は、このコード例または以下の例のようなことができます。SQL 環境内でも同様に実行できます。

認証を処理するために Windows だけが必要な場合は、たとえば、Windows 認証用に .NET Web アプリを設定できます。アプリケーションの IIS 内での匿名ログインをオフにしてください。完了したら、ユーザーの Windows ログオン名にアクセスし、それを使用してさらにセキュリティ チェックを行うことができます (たとえば、ADのグループ/ロール メンバーシップ)。

Enterprise Library のSecurity Application Blockなどを使用して、混乱全体を簡素化することもできます。


C# の短い例を次に示します (ここでVB.NET に変換します) 。

using System.DirectoryServices;

/// <summary>
/// Gets the email address, if defined, of a user from Active Directory.
/// </summary>
/// <param name="userid">The userid of the user in question.  Make
/// sure the domain has been stripped first!</param>
/// <returns>A string containing the user's email address, or null
/// if one was not defined or found.</returns>
public static string GetEmail(string userid)
{
    DirectorySearcher searcher;
    SearchResult result;
    string email;

    // Check first if there is a slash in the userid
    // If there is, domain has not been stripped
    if (!userid.Contains("\\"))
    {
        searcher = new DirectorySearcher();
        searcher.Filter = String.Format("(SAMAccountName={0})", userid);
        searcher.PropertiesToLoad.Add("mail");
        result = searcher.FindOne();
        if (result != null)
        {
            email = result.Properties["mail"][0].ToString();
        }
    }

    return email;
}

ドメイン コントローラを指定する必要はありません。DirectorySearcher の空/既定のコンストラクターを実行すると、自動的に検索が試行されます。実際、これが推奨される方法です。

于 2008-10-10T17:42:39.180 に答える
1

Windows 統合認証、ユーザーは IE を使用する必要があり、サイトはユーザーの信頼済みサイトにある必要があります。これらが当てはまる場合、IE は Windows セキュリティ トークンを Web サイトに渡し、それで認証します。これは、イントラネット上の SharePoint で行っています。そうしないと、制限されているものにアクセスするのが面倒です。ドキュメントをクリックするたびにプロンプ​​トが表示されます。

于 2008-10-10T22:43:06.563 に答える
1

.NET にはもっと直接的な方法があるのか​​もしれませんが、PHP では Active Directory サーバーに LDAP サーバーとしてアクセスするだけです。

これを行うためにサーバーにどのような調整が必要かはわかりません。サーバーをセットアップしませんでした。クエリを実行するだけです。PHP の使用を推奨しているわけでもありません。LDAP を扱う方が簡単で、Active Directory に直接結び付けようとする方が簡単だと思います。

于 2008-10-10T17:38:46.210 に答える
0

いいえ、もちろん違います。ランダムな Web アプリが AD のユーザー名とパスワードを取得できるという大混乱を想像できますか?

ここで、ユーザー名だけが必要な場合 -統合された Windows authを使用している場合、それは REMOTE_USER にあります。また、ドメイン(または信頼)を共有していると仮定すると、Windows認証はユーザーをサイトに自動ログインさせます。

編集: IWA はイントラネット シナリオで機能します。IE には既定でイントラネット サイトがイントラネット セキュリティ ゾーンに含まれているためです。また、システム管理者は GPO を使用して他の信頼できるサイトを設定できます。Firefoxは、 OperaChromeと同様にNTLM もサポートしています。全体として、イントラネットをセットアップするのは悪い方法ではありません。

ただし、資格情報を取得しないことに注意してください。クライアントとトークンをネゴシエートします。これにより、IWA が安全に保たれます (上記のポイントに関連します)。

于 2008-10-10T17:44:08.540 に答える