サイトはローカルで実行されていますIIS6.1。ADから情報を取得するための機能をいくつか追加したいと思います。ADコードは他の多くのプロジェクトや開発サーバーで機能します。これが私のユーザー名を書き出そうとします:
Response.Write("1. " + this.Request.LogonUserIdentity.Name);
Response.Write("2. " + Request.ServerVariables["Auth_User"]);
Response.Write("3. " + WindowsIdentity.GetCurrent().Name.ToString());
私が得た結果は次のとおりです。
Ourdomain/usernameのような実際のWindowsユーザー名を取得するにはどうすればよいですか?
ありがとう
このスニペットは、LogonUserIdentity
がどのように設定されているかを示しています(リフレクターを使用)
_ if ((this._wr is IIS7WorkerRequest) && (((this._context.NotificationContext.CurrentNotification == RequestNotification.AuthenticateRequest) && !this._context.NotificationContext.IsPostNotification) || (this._context.NotificationContext.CurrentNotification < RequestNotification.AuthenticateRequest)))
{
throw new InvalidOperationException(SR.GetString("Invalid_before_authentication"));
}
IntPtr userToken = this._wr.GetUserToken();
if (userToken != IntPtr.Zero)
{
string serverVariable = this._wr.GetServerVariable("LOGON_USER");
string str2 = this._wr.GetServerVariable("AUTH_TYPE");
bool isAuthenticated = !string.IsNullOrEmpty(serverVariable) || (!string.IsNullOrEmpty(str2) && !StringUtil.EqualsIgnoreCase(str2, "basic"));
this._logonUserIdentity = CreateWindowsIdentityWithAssert(userToken, (str2 == null) ? "" : str2, WindowsAccountType.Normal, isAuthenticated);
}
_
ご覧のとおり、これはIIS 7.)で変更されています。Windows認証+偽装を使用していると思いますので、 最後のもの(WindowsIdentity.GetCurrent()
)と一緒に行きます。これは、実行されているID要求であると確信しています。
HttpContext.Current.User.Identity
ここであなたに役立つかもしれません。
同様にSystem.Threading.Thread.CurrentPrincipal
助けることができます。
ただし、ユーザーがログインするときに実際にIDインスタンスを設定する必要がある場合があります(ただし、必ずしもIPrincipal
とその周辺のメカニズムを実装する必要はなく、組み込みのWindowsIdentity
実装を使用します)。
私はこれについて100%パーセントではありません、Windows認証かもしれませんあなたが単に取得するためにこれを自動的に設定します。
また、チェックアウト MSDNからのこのリンク 基本的なユーザー操作について説明しています。
まず、Webサイトがイントラネットゾーン内にあることを確認します(たとえば、 http://www.servername.com/ ではなく http:// servername / )、またはIEの信頼済みサイトのセキュリティ設定にFQDNを追加する必要があります。
次に、イントラネットゾーンを使用していない場合は、IEが資格情報を送信していることを確認してください-ツール->インターネットオプション->セキュリティ->カスタムレベル->ユーザー認証->ログオン->自動現在のユーザー名とパスワードでログオンする