5

次のコードを使用して、Kerberos 経由で認証しています。

IntPtr logonToken = WindowsIdentity.GetCurrent().Token;
string authenticationType = "WindowsAuthentication";
WindowsIdentity windowsIdentity = new WindowsIdentity(logonToken, authenticationType);

//windowsIdentity.Name == equals "IIS APPPOOL\Classic .NET AppPool" when I want it to be the user

これは、Web サーバーで .NET アプリケーションを実行しようとしたときにのみ発生します。デバッグのために自分のマシンでローカルにコードを実行すると、Name プロパティに自分のユーザー ID が表示されます。これをWebサーバーで機能させる方法について何か提案はありますか?

4

2 に答える 2

3

web.config で偽装を有効にする必要があります。

ASP.NET アプリケーションの WindowsIdentity として IIS によって提供される Windows ID を偽装するように ASP.NET を構成するには、アプリケーションの Web.config ファイルを編集し、次のように ID 構成要素の impersonate 属性を true に設定します。例。

<configuration>
  <system.web>
    <identity impersonate="true" />
  </system.web>
</configuration>

デバッグのためにコードをローカルで実行する場合、ログイン ユーザーとして実行される Web 開発サーバーを使用している可能性があります。これが、デバッグで正しいユーザーが表示される理由です。

于 2011-05-19T16:09:26.440 に答える
1

あなたの問題は、IIS サーバーが自分の ID ではなく、独自の ID で実行されていることです。したがって、WindowsIdentity.GetCurrent().TokenIIS ワーク プロセスの ID を返します。

IIS マネージャー コンソールを使用して、Web サイトを別の ID (自分のものを含む) で実行するように構成できます。 ここに画像の説明を入力

于 2011-05-19T15:54:41.393 に答える