web-dev-qa-db-ja.com

現在のユーザーのWindowsIDを取得する方法

サイトはローカルで実行されています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());

私が得た結果は次のとおりです。

  1. NT AUTHORITY\IUSR
  2. 管理者
  3. NT AUTHORITY\NETWORK SERVICE

Ourdomain/usernameのような実際のWindowsユーザー名を取得するにはどうすればよいですか?

ありがとう

9
Phil

このスニペットは、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要求であると確信しています。

2
Aliostad

HttpContext.Current.User.Identityここであなたに役立つかもしれません。

同様にSystem.Threading.Thread.CurrentPrincipal 助けることができます。

ただし、ユーザーがログインするときに実際にIDインスタンスを設定する必要がある場合があります(ただし、必ずしもIPrincipalとその周辺のメカニズムを実装する必要はなく、組み込みのWindowsIdentity実装を使用します)。

私はこれについて100%パーセントではありません、Windows認証かもしれませんあなたが単に取得するためにこれを自動的に設定します。

また、チェックアウト MSDNからのこのリンク 基本的なユーザー操作について説明しています。

3
Grant Thomas

まず、Webサイトがイントラネットゾーン内にあることを確認します(たとえば、 http://www.servername.com/ ではなく http:// servername / )、またはIEの信頼済みサイトのセキュリティ設定にFQDNを追加する必要があります。

次に、イントラネットゾーンを使用していない場合は、IEが資格情報を送信していることを確認してください-ツール->インターネットオプション->セキュリティ->カスタムレベル->ユーザー認証->ログオン->自動現在のユーザー名とパスワードでログオンする

0
Moo