Windows認証を使用してユーザー名を取得したい
実際に「別のユーザーとしてサインイン」を実装しました。このボタンをクリックすると、Windowsセキュリティが表示され、資格情報を提供できます。
その時間に他の資格情報を指定すると、現在のユーザー名のみが使用されます。その与えられた資格情報ユーザー名をWindowsセキュリティから取得する方法は?
IISのホストアプリケーションは、匿名認証が無効になり、Windows認証が有効になりました。
web.config:
<system.web>
<compilation debug="true" targetFramework="4.0" />
<identity impersonate="true"/>
<authorization>
<allow users="*"/>
<deny users="*"/>
</authorization>
</system.web>
<system.webServer>
<directoryBrowse enabled="true" />
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
。cs
ここでは、常にデフォルトのユーザー名を取得しています
string fullName = Request.ServerVariables["LOGON_USER"];
何か案は?前もって感謝します
次の方法で、Windows認証の下でユーザーの WindowsIdentity オブジェクトを取得できます。
WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;
そして、identity.Nameなどのユーザーに関する情報を取得できます。
これらのコードにはHttpContextが必要であることに注意してください。
これらは、IIS構成に応じて、アクセスできるさまざまな変数とその値です。
シナリオ1:IIS偽装をオフにした状態での匿名認証。
HttpContext.Current.Request.LogonUserIdentity.Name SERVER1\IUSR_SERVER1
HttpContext.Current.Request.IsAuthenticated False
HttpContext.Current.User.Identity.Name –
System.Environment.UserName ASPNET
Security.Principal.WindowsIdentity.GetCurrent().Name SERVER1\ASPNET
シナリオ2:IISでのWindows認証、偽装オフ。
HttpContext.Current.Request.LogonUserIdentity.Name MYDOMAIN\USER1
HttpContext.Current.Request.IsAuthenticated True
HttpContext.Current.User.Identity.Name MYDOMAIN\USER1
System.Environment.UserName ASPNET
Security.Principal.WindowsIdentity.GetCurrent().Name SERVER1\ASPNET
シナリオ3:IISでの匿名認証、偽装
HttpContext.Current.Request.LogonUserIdentity.Name SERVER1\IUSR_SERVER1
HttpContext.Current.Request.IsAuthenticated False
HttpContext.Current.User.Identity.Name –
System.Environment.UserName IUSR_SERVER1
Security.Principal.WindowsIdentity.GetCurrent().Name SERVER1\IUSR_SERVER1
シナリオ4:IISでのWindows認証、偽装
HttpContext.Current.Request.LogonUserIdentity.Name MYDOMAIN\USER1
HttpContext.Current.Request.IsAuthenticated True
HttpContext.Current.User.Identity.Name MYDOMAIN\USER1
System.Environment.UserName USER1
Security.Principal.WindowsIdentity.GetCurrent().Name MYDOMAIN\USER1
伝説SERVER1\ASPNET
:サーバーで実行中のプロセスのID。SERVER1\IUSR_SERVER1
:IISで定義された匿名ゲストユーザー。MYDOMAIN\USER1
:リモートクライアントのユーザー。
これは、アプリケーションの構成とIISに依存します。以下のリンクのこの紳士が正当に説明しているためです。以下の彼の記事を参照してください。
http://richhewlett.com/2011/02/15/getting-a-users-username-in-asp-net/
このようなユーザー名:
var userName = HttpContext.Current.Request.LogonUserIdentity?.Name;
以下のコードのため、新しい資格情報を取得していないと思います
string fullName = Request.ServerVariables["LOGON_USER"];
カスタムログインページを試すことができます。