質問: ### 躓いている点 C#(ASP.NET) + IIS8.5でのWebサーバ環境において、 クライアント端末のWindowsにログオンしているユーザIDを取得したいです。 Windows認証をONにすることで、「Request.LogonUserIdentity.Name」で取得が可能ですが、 Webサーバのドメインとクライアント端末のドメインが異なっており、 且つ2つのドメインで信頼関係が結ばれていないため、 Windows認証をオンにしたページへのアクセス時に ユーザID/PWを入力するダイアログが表示されてしまいます。 参考:https://social.technet.microsoft.com/Forums/ja-JP/e6c2cf2c-6f88-4abe-bcaa-8e71f862baea/iis-windows?forum=activedirectoryja 上記ダイアログにID/PWを入力しても、信頼関係の結ばれていないドメインのため、 再びダイアログが表示されてしまいます。 Webサーバと同じドメインに属するユーザID/PWを入れた場合、 処理が進みますが、「Request.LogonUserIdentity.Name」で取得できる値は ダイアログで入力したものとなります。(当然ですが) ### 試したこと Request.ServerVariables["REMOTE_USER"] -> 空 Request.ServerVariables["REMOTE_HOST"] -> クライアント端末のIP(IPが取れても意味がありません) Request.ServerVariables["REMOTE_ADDR"] -> クライアント端末のIP(IPが取れても意味がありません) Request.ServerVariables["LOGON_USER"] -> 空 new ActiveXObject("WScript.Network").UserName; -> 正常に取得可能 ActiveXを使うことで取得が可能なのですが、上記を実行するためには IEの設定で 「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」 を有効にする必要があります。 イントラネット環境で動くWebサーバではありますが、上記を有効にすることは厳しい状態です。 ### お伺いしたいこと 信頼されていないドメイン間において、クライアント端末のWindowsにログインしているユーザIDを 取得する方法は他にございますでしょうか。
回答: > > 信頼されていないドメイン間において、クライアント端末のWindowsにログインしているユーザIDを取得する方法は他にございますでしょうか。 > > > 「信頼されていないドメイン」ということですと、(1) ユーザーは非ドメインユーザーと同じ ⇒ (2) Windows 認証では認証不可 ⇒ (3) 認証されてないユーザーの ID は取得できない ⇒ (4) WIndows 認証では ID を取得する方法はない・・・ということにならざるを得ないと思います。 なので、上記 (2) のところをフォーム認証に変えて認証できるようにするという方法を取るぐらいしか自分は思いつきませんが、それは質問者さんとしては NG ですよね? もし、NG ではない、もしくは考えてみてもよいのであれば、以下の記事のように、ユーザーが Active Directory ドメイン サービスに対して認証を受けられるように、ASP.NET アプリケーションでフォーム認証を使用する方法がありますので検討してみてください。 ASP.NET からの Active Directory ドメイン サービス認証 https://msdn.microsoft.com/ja-jp/library/ms180890.aspx