web-dev-qa-db-ja.com

asp.netでID impersonate = "true"のときにWindowsユーザー名を取得する方法は?

会社の全員がアクセスできるイントラネットasp.net mvcアプリケーションを作成しています。データベースアクセスなどのために偽装したWebサイトを実行する必要がありますが、各ユーザーが誰であるかを知りたいです。

Page.User.Identity.Nameそれは空白です。サイトが偽装で実行されている場合でも、ユーザーのWindowsアカウント名を取得することは可能ですか?

編集:ここにもう少し情報があります。 IIS 6にサイトがあり、匿名アクセスが有効になっています。サイトは、データベースにアクセスできるシステムアカウントで実行されています(すべての従業員がデータベースにアクセスできないため) 。

私のweb.configには<authentication mode="Windows" />および<identity impersonate="true"/>

私の目標は、ユーザーがログインする必要がないことです-ユーザーがネットワークにログインしているという事実(およびサイトが外部IP上にないという事実)は十分な認証です。ユーザーが行った変更などを追跡するために、ユーザーが誰であるかを知りたいだけです。

43
MrDustpan

<authentication mode="Windows"/>アプリケーションでIISで有効にされた匿名アクセスでは、次の結果が表示されます。

System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 

<authentication mode="Windows"/>アプリケーションで「匿名アクセス」が無効になり、IISで「統合Windows認証」のみ、次の結果が表示されます。

System.Environment.UserName: ASPNET (user account used to run ASP.NET service)
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name\ASPNET

<authentication mode="Windows"/>および<identity impersonate ="true"/>アプリケーションで「匿名アクセス」が無効になり、IISで「統合Windows認証」のみ、次の結果が表示されます。

System.Environment.UserName: Windows Account Name 
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
120
gokul

これを試して

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

ユーザーのログイン名を含む文字列を返す必要があります

6
Gavin

この機能がMVCフレームワークの下で変更され、変更されたとは思わない限り、Page.User.Identity.Nameは引き続き機能するはずです。あなたのサイトは匿名認証を許可するように設定されているようです。その場合は、無効にしてみてください。

1
Ryan

他の誰もそれについて何も言わなかったので、私はちょうど私の修正を投稿したかったです。

サイトをサーバーに公開したときに同じ問題が発生していましたが、ローカルでは発生していませんでした。すべての設定は同じでした。ただし、IIS「デフォルトWebサイト」は一度もオフにされていません。関連付けられているサイトがなくても、実行され、トラフィックをインターセプトしていました。匿名認証はデフォルトでオンになり、ただし、ポート80で実行しているWebサイトではオフになっています。デフォルトがオンになっているため、ポート80へのすべてのトラフィックに対してオンになっているため、サイトがオフになっていても問題ありません。

デフォルトのWebを無効にすると、問題が修正されました。ポートを8080に変更しても機能します。

これが誰かの助けになることを願っています。

0
Kelly R