システムで現在ログインしているユーザーを取得するには、次のコードを使用します。
string opl = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
この情報が必要なASP.NETアプリケーションで作業しています。そのため、アプリケーションをサーバーに配置して上記のコードを試したところ、文字列oplに「ネットワークサービス」が表示されました。 ASP.NETアプリケーションにアクセスするPCの現在のユーザーを知る必要があります。
メンバーシップを使用している場合は、次のことができます:Membership.GetUser()
コードは、ASP.NETで割り当てられたWindowsアカウントを返しています。
簡単な答えはUser = System.Web.HttpContext.Current.User
Web.configに次の認証要素があることを確認してください。
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
System.Web.HttpContext.Current.User.Identity.Name
を使用すると動作するはずです。以下を実行して、サイトをホストしているサーバーのIISサイト設定を確認してください。
IIS→サイト→あなたのサイト→認証
匿名アクセスが無効になっていることとWindows認証が有効になっていることを確認します。
これで、System.Web.HttpContext.Current.User.Identity.Name
は次のようなものを返すはずです。
domain\username
ベストプラクティスは、Identity.IsAuthenticated
最初にプロパティ、次にusr.UserName
このような:
string userName = string.Empty;
if (System.Web.HttpContext.Current != null &&
System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
System.Web.Security.MembershipUser usr = Membership.GetUser();
if (usr != null)
{
userName = usr.UserName;
}
}
単にページのプロパティを使用できます。そして興味深いのは、コードのどこからでもそのプロパティにアクセスできることです。
これを使って:
HttpContext.Current.User.Identity.Name
見過ぎないでください。
ASP.NET MVCを使用して開発する場合、単純にユーザーを Controller
クラスのプロパティ として設定します。そのため、現在のユーザーを探している一部のモデルで迷子になった場合は、一歩下がってコントローラの関連情報を取得してください。
コントローラーでは、次を使用します。
using Microsoft.AspNet.Identity;
...
var userId = User.Identity.GetUserId();
...
userId
を文字列として。
上記の一般的なコンセンサスの回答には、CORSサポートとの互換性の問題があるようです。 HttpContext.Current.User.Identity.Name属性を使用するには、Windows認証に認証済みユーザー情報を提供させるために匿名認証を無効にする必要があります。残念ながら、CORSシナリオでプリフライトOPTIONSリクエストを処理するには、匿名認証を有効にする必要があります。
これを回避するには、匿名認証を有効のままにして、代わりにHttpContext.Current.Request.LogonUserIdentity属性を使用します。これにより、匿名認証が有効になっている場合でも、認証されたユーザー情報が返されます(イントラネットシナリオを想定しています)。この属性はWindowsUserデータ構造を返し、両方ともSystem.Web名前空間で定義されます
using System.Web;
WindowsIdentity user;
user = HttpContext.Current.Request.LogonUserIdentity;
私は同じ問題で走りました。
これは私のために働いたものです:
NTLMは最上位でなければなりません。さらにWeb.configを修正し、すでに存在するか、これらが存在しない場合は追加することを確認します。
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
</system.web>
<!-- you need the following lines of code to bypass errors, concerning type of Application Pool (integrated pipeline or classic) -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
以下の2つのノードの正当な説明と
<system.web>と<system.webServer>の違い?
そして、もちろん、次の方法でユーザー名を取得します
//I am using the following to get the index of the separator "\\" and remove the Domain name from the string
int indexOfSlashChar = HttpContext.Current.User.Identity.Name.IndexOf("\\");
loggedInWindowsUserName = HttpContext.Current.User.Identity.Name.Substring(indexOfSlashChar + 1);