この記事では、 Request.ServerVariables("LOGON_USER") 変数が ASP.NET で空の文字列を返す問題の解決策について説明します。
元の製品バージョン: 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 Project フォルダーを右クリックし、Properties を選択します。
Web Project フォルダーの Properties を選択した場合は、Directory セキュリティ タブを選択します。.aspx ファイルの Properties を選択した場合は、[File Security] タブを選択します。
[ Anonymous Access and authentication controlで、 Edit を選択します。
[ 認証方法 ] ダイアログ ボックスで、[ Anonymous Access ] チェック ボックスをオフにし、[ Basic、 Digest、または Integrated (NT Challenge/Response) チェック ボックスをオンにします。
OKを選択して両方のダイアログ ボックスを閉じます。
状態
この動作は仕様によるものです。
詳細
ASP.NET では、.config ファイルで構成できる新しい認証モードと承認スキームが提供されます。 このため、IIS のみで認証モードを変更しても、常に目的の結果が得られるとは限りません。 そのため、.config ファイルのセキュリティ設定も考慮する必要があります。
Note
Windows 認証と組み合わせて匿名認証を有効にした場合、またはNone以外の認証モードを使用しているときに、<authorization> セクションで匿名ユーザーへのアクセスを許可した場合、AUTH_USERやREMOTE_USERなどの他のサーバー変数 (HttpContext.Current.User.Identity.Name プロパティ) も空の文字列を返します。 上記の解決策のいずれかを使用して、これらの変数を設定できます。
ASP.NET では、Request オブジェクトの IsAuthenticated プロパティを使用して、匿名アクセス セキュリティが使用されているかどうかを判断することもできます。 IsAuthenticated は false を返し 匿名アクセスが有効になっている場合は true を返します Forms、 Passport、 Integrated (NT Challenge/Response)、 Basicなどの他の認証方法を使用する場合。