Request.ServerVariables("LOGON_USER") は、ASP.NET で空の文字列を返します
この記事では、変数が ASP.NET で空の文字列を Request.ServerVariables("LOGON_USER")
返す問題の解決策について説明します。
元の製品バージョン: ASP.NET
元の KB 番号: 306359
現象
ASP.NET 内の Request.ServerVariables("LOGON_USER")
変数にアクセスしようとすると、空の文字列が返されます。
Microsoft Visual C# .NET を使用している場合は、次の構文でこの変数にアクセスします。
Request.ServerVariables["LOGON_USER"]
原因
この問題は、匿名アクセス セキュリティを使用して .aspx ページに ServerVariables
アクセスする場合、コレクション内の認証関連の変数が設定されないために発生します。 この問題は、web.config ファイルのセクションで匿名ユーザーにアクセス権を<authorization>
付与した場合にも発生する可能性があります。
解決方法
以外None
のLOGON_USER
認証モードを使用するときに変数を設定するには、web.config ファイルのセクションで<authorization>
匿名ユーザーへのアクセスを拒否できます。 このセクションの匿名ユーザーへのアクセスを拒否するには、次の <authorization>
手順に従います。
web.config ファイル内の認証モードを他
None
のものに変更します。 たとえば、 web.config ファイルの次のエントリは、認証モードをフォーム ベースの認証に設定します。<authentication mode="Forms" />
web.config ファイル内の匿名ユーザーへのアクセスを拒否するには、次の構文を使用します。
<authorization> <deny users = "?" /> <!-- This denies access to the anonymous user --> <allow users ="*" /> <!-- This allows access to all users --> </authorization>
Windows 認証を使用している場合は、次の手順を使用してこの問題を解決することもできます。
web.config ファイルの認証モードを
Windows
次のように変更します。<authentication mode="Windows" />
Internet Services Manager で、.aspx ファイルまたは Web プロジェクト フォルダーを右クリックし、[プロパティ] を選択します。
Web プロジェクト フォルダーの [プロパティ] を選択した場合は、[ディレクトリ セキュリティ] タブを選択します。.aspx ファイルのプロパティを選択する場合は、[ファイル セキュリティ] タブを選択します。
[ 匿名アクセスと認証の制御] で、[編集] を選択 します。
[ 認証方法 ] ダイアログ ボックスで、[ 匿名アクセス ] チェック ボックスをオフにし、 Basic、 ダイジェスト、または [統合 (NT チャレンジ/応答)] チェック ボックスをオンにします。
[ OK] を 選択して、両方のダイアログ ボックスを閉じます。
状態
この動作は仕様です。
詳細情報
ASP.NET には、.config ファイルで構成できる新しい認証モードと承認スキームが用意されています。 このため、IIS のみで認証モードを変更すると、必ずしも目的の結果が得られるとは限りません。 そのため、.config ファイルのセキュリティ設定も考慮する必要があります。
注:
Windows 認証と組み合わせて匿名認証を有効にした場合、またはセクション内の<authorization>
匿名ユーザーにアクセスを許可する場合は、他の認証モード None
(およびプロパティなどAUTH_USER
REMOTE_USER
) 以外の他のHttpContext.Current.User.Identity.Name
サーバー変数も空の文字列を返します。 上記の解決策のいずれかを使用して、これらの変数を設定できます。
ASP.NET では、オブジェクトのRequest
プロパティをIsAuthenticated
使用して、匿名アクセス セキュリティが使用されているかどうかを判断することもできます。 IsAuthenticated
匿名アクセスが有効になっている場合は false を返し、その他の認証手段 (例: Forms
、 ) をPassport
Integrated (NT Challenge/Response)
Basic
使用する場合は true を返します。