トップ回答者
Request.ServerVariables("REMOTE_USER")が空の文字列を返す

質問
-
APS.NETでWEBアプリを開発しています。
Visual Studio 2005で作成したプロジェクトをVisual Studio 2017で変換を行いました。
ログインユーザーIDを取得したいのですが、
Request.ServerVariables("REMOTE_USER")
で空の文字列が返ってきました。
※Windows認証モードVS2005では、ログインユーザーIDが取得できていました。
VS2017では、なぜ空の文字列なのでしょうか。
バージョンが上がってRequest.ServerVariables("REMOTE_USER")は使用できないのでしょうか。Request.ServerVariables("REMOTE_USER")でログインユーザーIDを取得する方法を
ご存知の方がいらっしゃいましたら教えて頂けますでしょうか。ちなみに、
Request.LogonUserIdentity.Name
ではログインユーザーIDが取得できました。よろしくお願いいたします。
環境
VisualStudio2017community
VisualBasic2017※追記:実行方法
ローカルにモジュールを置いての実行で、今回の事象が発生しています。
- 移動 立花楓Microsoft employee, Moderator 2018年2月6日 0:13 Visual Studio Development > Visual Basic
- 編集済み HAHAHA2017 2018年2月6日 1:35
回答
-
> >Web アプリは IIS 上で動かしていますか?
> 動かしていないです。質問者さんの開発マシンの OS が何だか分かりませんが(そういう基本のキ的な情報は質問の一番最初に書きましょうね)、Professional エディションならローカル IIS を使えますので、Web アプリを IIS 上で動くようにしてください。
Windows 認証は Windows の機能に依存するもので、Internet Explorer と IIS の組み合わせでなければ実現できないそうです。(他の組み合わせでできたとしてもたまたまで、Microsoft が保証しているわけではなさそうです)
> VisualStadioから「デバッグなしで開始」で動かしました。
それは多分 IIS Express 上で動いていると思います。
IIS Express でも Visual Studio でプロジェクトのプロパティを設定することで Windows 認証が使えるという話を聞きます。
自分は使ったことがないし、IIS と完全に同じ機能になるのかどうかは不明ですが、簡単に設定できそうなので、物は試しということで、試してみてはいかがでしょう。
- 回答としてマーク HAHAHA2017 2018年2月6日 7:27
すべての返信
-
HAHAHA2017 さん、こんにちはフォーラム オペレーターの立花です。
MSDN フォーラムへの投稿ありがとうございます。
内容から ASP.NET フォーラムの方が情報が寄せられやすいように
みえましたので移動いたしますね。
.Net Framework > ASP.NET
それでは皆様からの投稿をお待ちください。
~ 参考になった投稿には回答としてマークの設定にご協力ください ~
MSDN/TechNet Community Support 立花楓 -
確認ですが、以下のページに書かれていることを試されましたでしょうか?
[PRB] ASP.NET で Request.ServerVariables("LOGON_USER") が空の文字列を返す
https://support.microsoft.com/ja-jp/help/306359/prb-request-servervariables-logon-user-returns-empty-string-in-asp-net★良い回答には質問者は回答済みマークを、閲覧者は投票を!
-
> VS2005では、ログインユーザーIDが取得できていました。
> VS2017では、なぜ空の文字列なのでしょうか。匿名認証でアクセスしているからではないかと思います。
Web アプリは IIS 上で動かしていますか? 以下の画像のように、匿名認証は無効になっているでしょうか? 匿名認証が有効になっていると、当然匿名アクセスになって、ログインしてないのだから「ログインユーザーID」は取得できません。
> バージョンが上がってRequest.ServerVariables("REMOTE_USER")は使用できないのでしょうか。
Visual Studio のバージョンは関係ないです。
ASP.NET の Request.ServerVariables プロパティは IIS と連携して情報を取得する機能ですので、バージョンが関係するとすれば IIS のバージョンでしょうが、IIS 10 でも REMOTE_USER は取得できます。
念のため自分の開発環境で検証してみましたが、IIS 10 上の画像の Web アプリ (WindowsAuthentication) の場合は以下の結果になります。
Key: AUTH_TYPE
Value 0: Negotiate
Key: AUTH_USER
Value 0: MYCOMPUTER\surfe
Key: AUTH_PASSWORD
Value 0:
Key: LOGON_USER
Value 0: MYCOMPUTER\surfe
Key: REMOTE_USER
Value 0: MYCOMPUTER\surfe
試しに匿名認証を許可してみると(Windows 認証では本来匿名アクセスを許可しません)以下の通り取得できません。Key: AUTH_TYPE
Value 0:
Key: AUTH_USER
Value 0:
Key: AUTH_PASSWORD
Value 0:
Key: LOGON_USER
Value 0:
Key: REMOTE_USER
Value 0: -
> >Web アプリは IIS 上で動かしていますか?
> 動かしていないです。質問者さんの開発マシンの OS が何だか分かりませんが(そういう基本のキ的な情報は質問の一番最初に書きましょうね)、Professional エディションならローカル IIS を使えますので、Web アプリを IIS 上で動くようにしてください。
Windows 認証は Windows の機能に依存するもので、Internet Explorer と IIS の組み合わせでなければ実現できないそうです。(他の組み合わせでできたとしてもたまたまで、Microsoft が保証しているわけではなさそうです)
> VisualStadioから「デバッグなしで開始」で動かしました。
それは多分 IIS Express 上で動いていると思います。
IIS Express でも Visual Studio でプロジェクトのプロパティを設定することで Windows 認証が使えるという話を聞きます。
自分は使ったことがないし、IIS と完全に同じ機能になるのかどうかは不明ですが、簡単に設定できそうなので、物は試しということで、試してみてはいかがでしょう。
- 回答としてマーク HAHAHA2017 2018年2月6日 7:27
-
SurferOnWww さん
>質問者さんの開発マシンの OS が何だか分かりませんが(そういう基本のキ的な情報は質問の一番最初に書きましょうね)
失礼しました。
開発マシンのOSは、Windows10 Pro です。>Professional エディションならローカル IIS を使えますので、Web アプリを IIS 上で動くようにしてください。
IISの構築については、これから勉強します。>IIS Express でも Visual Studio でプロジェクトのプロパティを設定することで Windows 認証が使えるという話を聞きます。
Visual Studio でプロジェクトのプロパティを設定したところ(Windows認証:有効、匿名認証:無効)、
Request.ServerVariables("REMOTE_USER")でログインユーザーIDを取得することができました。
ありがとうございました。SurferOnWww さんに回答マークを付けさせていただきます。