web-dev-qa-db-ja.com

現在ログインしているWindowsアカウントをASP.NETページから取得するにはどうすればよいですか?

ASP.NETフォーム認証を使用するASP.NET 3.5アプリケーションがあります。ページでデータを編集するときに、現在コンピューターにログインしているWindowsユーザー名(ASP.NETアプリケーションではなく、Windowsにログインしている)を取得できるようにします。

Context.User.Identity.Name.Tostring()を使用する場合、ASP.NETアプリケーションにログインしているユーザー名を取得しますが、Windowsアカウント名が必要です。

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

また、Visual StudioからWebサイトを実行する場合にのみ機能しますが、IISに展開した後、NT AUTHORITY\SYSTEMを返します。

20
StackTrace

設定で認証モードをWindowsに設定し、認証タグで匿名ユーザーを無効にする必要があります。

15
Zo Has

現在ログインしているユーザーをWindowsアカウントに取得するには、Windows authentication の代わりに Forms authentication

System.Security.Principal.WindowsIdentity.GetCurrent()。Name.Tostring()は、Visual StudioからWebサイトを実行する場合にのみ機能しますが、IISに展開した後、NT AUTHORITY\SYSTEMを返します

アプリケーションの現在のユーザーを表示します。 Visual Studio Webサーバーでアプリケーションをホストすると、ローカルアカウントが使用されます。ただし、異なる資格情報でWebアプリケーションにログインすると、常に現在のWindowsログインが表示されます。

IISにデプロイされたアプリケーションは、あなたのケースではNT AUTHORITY\SYSTEMアカウントを使用します。

10

現在ログインしているユーザーをC#でWindowsに取得するには、次を使用します。

string Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
9

私はこれに苦労しました。その1つは、IISにアクセスできず、ロックダウンされているため、サーバーの設定を変更できなかったことです。コードでできることを行かなければなりませんでした。私がそれを調査したとき、多くの回答は「セットアップIISこのように」)と言っていました..まあ、それはあなたがIISにアクセスできれば素晴らしいことですが、コードでできることを処理するため、次のように処理することになりました。

Web設定ファイルで、セクション内に次のコード行を追加しました。

<system.webServer>
<security>
  <authentication>
    <anonymousAuthentication enabled="false" />
    <windowsAuthentication enabled="true" />
  </authentication>
</security>
</system.webServer>

その後、ローカルでエラーが返されたので、それを修正する必要がありました。マシンの次のパスにあるapplicationhost.configファイルにアクセスしました(実際のファイルは異なる場合があります)。

C:\ users\"your user name"\My Documents\"yourIISInstallation"\config\applicationhost.config

そして、次の設定を「許可」に変更しました。「許可」は「拒否」に設定されていました。

<section name="anonymousAuthentication" overrideModeDefault="Deny" />

に変更されました

<section name="anonymousAuthentication" overrideModeDefault="Allow" />

そして

<section name="windowsAuthentication" overrideModeDefault="Deny" />

<section name="windowsAuthentication" overrideModeDefault="Allow" />

の中に

<sectionGroup name="authentication">

セクション。この修正を見つける前に、私はこれで髪を引っ張っていました。これが誰かの助けになることを願っています。上記のコードをwebconfigファイルに入れるとすぐにイントラネットで動作し、ローカルでエラーを返しましたが、上記をローカルのapplicationhost.configファイルに追加するとすぐにローカルで動作し始めました同様に。次に、次の変数を呼び出して、Windowsでログインしているユーザーの名前を返します。

    HttpContext.Current.User.Identity.Name.ToString().Substring((HttpContext.Current.User.Identity.Name.ToString().IndexOf("\\")) + 1);

乾杯!

7
dotnetterdev

私はこれを使用します:

System.Security.Principal.WindowsPrincipal user;
user = new WindowsPrincipal(this.Request.LogonUserIdentity);
this.Request.LogonUserIdentity.Impersonate();
user_name = user_name.Substring(user_name.LastIndexOf("\\") + 1);
4
kobe
string strName = HttpContext.Current.User.Identity.Name.ToString();

あなたが望んでいたようにそれは正しいですが、ASP.NETを使用してウィンドウNTログに記録されたユーザー名を取得する方法を参照して、最初にWebサーバーをセットアップする必要がありますWebサーバーのセットアップ手順)。

1
Postback

次のリンクの方法1の指示に従って、この問題を解決できました- https://support.Microsoft.com/en-us/help/896861/you-receive-error-401- 1-when-you-browse-a-web-site-that-uses-integrate 簡単に言うと、Windows認証を除くすべての認証方法を無効にします。管理者アカウントでregeditを開き、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0を見つけ、ノードを右クリックして[新規作成]を選択し、[複数行文字列値]を選択します。 「BackConnectionHostNames」と入力し、Enterをクリックします。 [値]に、アクセスを設定しようとしているWebサイトを入力し、[OK]をクリックします。再起動IIS完了したら、HttpContext.Current.User.Identity.Nameを使用して現在のWindowsユーザーを取得できました。WindowsPrincipal(this.Request.LogonUserIdentity)もWindowsを取得しました。ログインしているユーザー名。参照用にSystem.Environment.UserNameおよびSystem.Security.Principal.WindowsIdentity.GetCurrent()。Nameについては、これらの両方ともIISユーザー。

これにより、私は何年もかけて最下位に到達しました。頑張ってください。 IISは目覚める悪夢です!

0
Glen Quarless

以下のコード行で試してください:

string loggedOnUser = string.Empty;
 loggedOnUser = Request.ServerVariables.Get("AUTH_USER");

Visual Studioからアプリケーションを実行するときに値を取得していない可能性があります... IISに展開した後に確認します。

ユーザー名を取得するには、次を使用します。

string userName = string.Empty;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "Your Domain Name"))
{
    UserPrincipal user = new UserPrincipal(pc);
    user = UserPrincipal.FindByIdentity(pc, "User ID Will Come here");
    if (user != null)
    {
        userName = user.GivenName + " " + user.Surname;

    }
    else
    {
        //return string.Empty;
        userName = "User Not Found";
    }
}
0
Rohit Vyas