1

私はWindows認証で奇妙な問題があります。私たちは、Windows認証を使用する単一のフォルダを持つasp.net webformsアプリケーションを持っています。このフォルダはIISのWindows認証用に正しく構成されています。アプリケーションはweb.configを介して.net偽装を使用します。我々は、Windows認証使用して、このフォルダ内のページに移動する場合:現在のwindowsidentityはWindows認証のcurrentrequestユーザーIDと同じ

  • をsystem.web.httpcontext.current.user.Identity.Nameは、要求を行っているユーザーの名前を返します(これが期待されている)
  • System.security.principal.windowsIdentifier.getCurrent.Nameは

は、今、私たちは私たちの製品の新しいバージョンに取り組んできた(これも期待されている)アプリケーションを実行するユーザーの名前を返します。長い時間。そして、我々は今行動が変わったことを知る。同じテストを再度実行すると、httpcontextユーザー名とprincipal.windowsidentity.getcurrentの両方が、要求を実行しているユーザーの名前を返します。

我々は、関連するすべてのコードをチェックしているし、我々はこの行動とは何かを持っている任意の違いを見つけるように見えることはできません。アプリケーションを.Net 4.0から.Net 4.5.2に変換しました。ただし、古いバージョンを.Net 4.5.2に変換すると、その動作は正しいままです(2つのプロパティは異なるIDを示します)。違いがあるようです。

、この動作の原因を調べする場所に任意の考え?

編集: デバッグすると、global.asax prerequesthandlerの実行時にIDが既に間違っていることがわかります。 beginrequestでは、Webサイトの偽装は実行されていません。現在のIDは、アプリケーションプールIDです。

Edit2: サーバー固有のようです。何らかの理由で古いバージョンは開発マシンで正しく動作しますが、新しいバージョンは正しく動作しません。しかし、新しいバージョンはデプロイメントサーバー(私たちの毎日のビルド)で正しく動作します。誰もが原因についての指針を持っていますか?

答えて

1

右に問題が見つかりました。問題はIISがWindows認証を使用してフォルダにweb.configを追加したことで、そのフォルダで偽装が有効になっていたことです。同じフォルダでWindows認証と偽装の両方が有効になっている場合、Windows IDと要求IDが同じユーザーであるという動作は正しいです。

Windows認証を有効にすることで、偽装を無効にすることで、必要な状況を達成できます。この場合、ウィンドウのIDはデフォルトのWebサイトのユーザーであり、要求IDはページにアクセスするユーザーのWindows IDです

関連する問題