6

コンソール アプリケーションを使用してテスト コードを記述します。

    /// <summary>
    /// Returns AD information for a specified userID.
    /// </summary>
    /// <param name="ntID"></param>
    /// <returns></returns>
    public ADUser GetUser(string ntID)
    {            
        DirectorySearcher search = new DirectorySearcher();         
        search.Filter = String.Format("(cn={0})", ntID);
        
        search.PropertiesToLoad.Add("mail");
        search.PropertiesToLoad.Add("givenName");
        search.PropertiesToLoad.Add("sn");
        search.PropertiesToLoad.Add("displayName");
        search.PropertiesToLoad.Add("userPrincipalName");            
        search.PropertiesToLoad.Add("cn");

        SearchResult result = search.FindOne();

        return new ADUser(result);
    }

そして、これはコンソールアプリからうまくいきました。しかし、ASP.NET アプリケーションに移動すると、正しいドメインがわからないというエラー メッセージが表示されました。

ASPNET アカウントで実行しているときに AD にアクセスするために欠けているトリックはありますか?

EDIT : 実際のログイン/パスワードが必要なため、 LDAP://domain 接続文字列を渡すだけでは十分ではありません。これはマシンのローカル アカウントで実行されるため、どの AD L/P を使用すればよいかわかりません。アクセスしているユーザー アカウントをこれに委任できますか?

編集 #2 : ID の偽装を使用しようとすると、次のような DirectoryServicesCOMException が発生します。

認証メカニズムは不明です。

4

5 に答える 5

1

はい。ディレクトリ接続文字列を指定する必要があります。コンソール アプリ (ユーザーとして実行) は、ディレクトリ アクセスを含む資格情報を使用して実行されます。ASP.NET アプリは ASPNET ユーザーの資格情報を使用して実行されます。この資格情報は、ディレクトリ グローバルではなく、アプリが実行されているシステムに対してローカルです。

于 2008-12-08T19:47:22.273 に答える
1

Windows 認証を使用するイントラネット アプリケーションの場合、ユーザーの偽装コンテキストで AD 呼び出しをラップできます。

何かのようなもの:

using (((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate())
{
    // Do your AD stuff here
}
于 2008-12-08T19:57:35.527 に答える
1

これを回避する最も簡単な方法は、必要なアクセス権を持つドメイン アカウントとして Web アプリケーション プールを実行することです。これにより、パスワードの安全な保管を管理する必要がなくなります。アカウントを IIS_WPG ローカル グループのメンバーにすることを忘れないでください。偽装を使用する場合は、Kerberos 委任を構成し、ASP.NET 構成を偽装するように変更する必要があります。これには、アプリケーション プールをドメイン アカウントとして実行し、そのドメイン アカウントに資格情報を委任するアクセス許可を付与する必要があります (AD ユーザーとコンピューター MMC のアカウント プロパティの [委任] タブ)。次に、Web サイトがメタベースで negoiate を使用するように設定されていることを確認し (これは IIS6 のデフォルトであり、他のバージョンについては不明です)、新しいドメイン アカウントの SPN を登録します。

編集:「不明な認証」エラーは、委任の構成が間違っているように聞こえます。アプリ プールが実行されているアカウントが委任に対して信頼されていること、IIS が Windows 認証のみを使用するように設定されていること、アプリ プール ID アカウントに有効な SPN が登録されていることを確認してください。

于 2008-12-08T19:58:20.737 に答える
1

または、web.config で identity impersonate=true を指定すると、Active Directory への要求が Machine\ASPNET ではなく、呼び出し元のユーザーとして送信されます。

編集: 認証エラーが発生する場合は、PIPTHEGEEK の投稿を参照してください。Web サーバーを委任のために信頼する必要がありますが、委任の信頼には注意してください (セキュリティ タイプの別のワームを開くため)。Web サーバーが現在のユーザーの資格情報を AD に渡すことを許可する必要があります。

可能であれば、コンピューターの AD プロパティに移動し、委任タブを選択して、[このコンピューターをすべてのサービスへの委任に対して信頼する (Kerberos のみ)] を選択します。

それが機能するかどうかを確認してください。その場合は、次の 3 番目のオプションを使用して、アクセス許可をさらに細かく設定できます。

「指定されたサービスへの委任についてのみ、このコンピューターを信頼する」

次に、[Kerberos のみを使用] を選択します。

「このアカウントが委任された資格情報を提示できるサービス」で、関連するサービス情報を追加します。

于 2008-12-08T19:51:13.967 に答える
1

ログインにドメインを含めることもできます

adSharepointUsers = new DirectoryEntry("LDAP://MyDomain","MyDomain/ADUser","password");
于 2011-06-27T12:33:48.497 に答える