web-dev-qa-db-ja.com

asp.netでWindows認証を使用してユーザー名を取得する方法は?

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"];

何か案は?前もって感謝します

14
user2148679

次の方法で、Windows認証の下でユーザーの WindowsIdentity オブジェクトを取得できます。

WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;

そして、identity.Nameなどのユーザーに関する情報を取得できます。

これらのコードにはHttpContextが必要であることに注意してください。

26
slepox

これらは、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:リモートクライアントのユーザー。

ソース

7

これは動作するはずです:

User.Identity.Name

IdentityIPrincipalを返します

以下は、Microsoft ドキュメント へのリンクです。

4
David Brossard

これは、アプリケーションの構成とIISに依存します。以下のリンクのこの紳士が正当に説明しているためです。以下の彼の記事を参照してください。

http://richhewlett.com/2011/02/15/getting-a-users-username-in-asp-net/

2
Kaushik Ghosh

このようなユーザー名:

var userName = HttpContext.Current.Request.LogonUserIdentity?.Name;
0
Ogglas

以下のコードのため、新しい資格情報を取得していないと思います

string fullName = Request.ServerVariables["LOGON_USER"];

カスタムログインページを試すことができます。

0