3

アプリケーション プールをクラシック .Net アプリケーション プールにする必要がある ASP.NET Web サイトがあります。サイトは IIS 7 の .NET 3.5 で実行されています。ログインしているユーザーの Active Directory ユーザー名を取得しようとすると、次のようになります。

System.Security.Principal.WindowsIdentity.GetCurrent().Name

私は以下を取得します:

IIS APPPOOL\\Classic .NET AppPool   

ただし、アプリプールを.net 4.0に設定すると、ログインしたユーザー名が返されます(これが必要です)。設定がありませんか?

4

2 に答える 2

3

まず、次の行を web.config 構成セクション内に配置します。

<authentication mode="Windows"/>
<authorization>
  <deny users="?"/>
</authorization>
<identity impersonate="true"/>

次に、IIS マネージャーに移動して Web アプリのプロパティを開き、認証の次の設定を確認します。

匿名認証 = 無効、ASP.NET 偽装 = 有効 (実際には必要ありません)、Windows 認証 = 有効

この設定により、Active Directory ユーザーが付与され、偽装も行われます。

于 2012-09-28T19:25:38.300 に答える
0

同じコードが使用されていて、それが 1 つのアプリケーション プールで機能し、別のアプリケーション プールでは機能しない場合は、アプリケーション プールの設定を確認します。Identity 属性を探します。.NET 4.0 プールでは ApplicationPoolIdentity があり、3.5 ではハードコードされたアカウントがあると思います。

編集

したがって、実際にはユーザーの資格情報を取得していないようです。もちろん、ローカルで実行するとドメインアカウントを取得します....プロセスは資格情報の下で実行されます。しかし、別のマシンで実行すると、リクエストを処理するアカウントの資格情報で実行されます...ユーザーになりすますように指示するまで。それでも、資格情報を取得するためにサイトの Windows 認証を設定するか、AD フックでフォーム認証を使用して現在のユーザー アカウントですべてを取得する必要がある場合があります。

于 2012-09-28T18:56:12.040 に答える