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>付与した場合にも発生する可能性があります。

解決方法

以外NoneLOGON_USER認証モードを使用するときに変数を設定するには、web.config ファイルのセクションで<authorization>匿名ユーザーへのアクセスを拒否できます。 セクションの匿名ユーザーへのアクセスを拒否するには、次の <authorization> 手順に従います。

  1. web.config ファイルの認証モードを 以外Noneのものに変更します。 たとえば、 web.config ファイルの次のエントリは、認証モードをフォーム ベースの認証に設定します。

    <authentication mode="Forms" />
    
  2. web.config ファイル内の匿名ユーザーへのアクセスを拒否するには、次の構文を使用します。

    <authorization>
        <deny users = "?" /> <!-- This denies access to the anonymous user -->
        <allow users ="*" /> <!-- This allows access to all users -->
    </authorization>
    

Windows 認証を使用している場合は、次の手順を使用してこの問題を解決することもできます。

  1. web.config ファイルの認証モードを次のようににWindows変更します。

    <authentication mode="Windows" />
    
  2. Internet Services Manager で、.aspx ファイルまたは Web プロジェクト フォルダーを右クリックし、[プロパティ] を選択します

  3. Web プロジェクト フォルダーの [プロパティ] を選択した場合は、[ディレクトリ セキュリティ] タブを選択します。.aspx ファイルの [プロパティ] を選択した場合は、[ファイル のセキュリティ] タブを選択します。

  4. [ 匿名アクセスと認証制御] で、[編集] を選択 します

  5. [認証方法] ダイアログ ボックスで、[匿名アクセスチェック] ボックスをオフにし、[基本]、[ダイジェスト]、または [統合 (NT チャレンジ/応答)] チェック ボックスを選択します。

  6. [ OK] を選択 して、両方のダイアログ ボックスを閉じます。

状態

この動作は仕様です。

詳細

ASP.NET では、.config ファイルで構成できる新しい認証モードと承認スキームが提供されます。 このため、IIS のみで認証モードを変更すると、常に目的の結果が得られるとは限りません。 そのため、.config ファイルのセキュリティ設定も考慮する必要があります。

注:

Windows 認証と組み合わせて匿名認証を有効にした場合、または、 以外の認証モードを使用している間にセクション内の<authorization>匿名ユーザーへのアクセスを許可する場合は、 などのAUTH_USERREMOTE_USER 他のサーバー変数 (および HttpContext.Current.User.Identity.Name プロパティ) も空の文字列を返します。None 上記のいずれかの解決策を使用して、これらの変数を設定できます。

ASP.NET では、 オブジェクトの プロパティをIsAuthenticatedRequest使用して、匿名アクセス セキュリティが使用されているかどうかを判断することもできます。 IsAuthenticated匿名アクセスが有効になっている場合は false を返し、などのFormsPassportIntegrated (NT Challenge/Response)Basic他の認証方法を使用する場合は true を返します。

関連情報