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を返します。
設定で認証モードをWindows
に設定し、認証タグで匿名ユーザーを無効にする必要があります。
現在ログインしているユーザーを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アカウントを使用します。
現在ログインしているユーザーをC#でWindowsに取得するには、次を使用します。
string Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
私はこれに苦労しました。その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);
乾杯!
私はこれを使用します:
System.Security.Principal.WindowsPrincipal user;
user = new WindowsPrincipal(this.Request.LogonUserIdentity);
this.Request.LogonUserIdentity.Impersonate();
user_name = user_name.Substring(user_name.LastIndexOf("\\") + 1);
string strName = HttpContext.Current.User.Identity.Name.ToString();
あなたが望んでいたようにそれは正しいですが、ASP.NETを使用してウィンドウNTログに記録されたユーザー名を取得する方法を参照して、最初にWebサーバーをセットアップする必要がありますWebサーバーのセットアップ手順)。
次のリンクの方法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は目覚める悪夢です!
以下のコード行で試してください:
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";
}
}