1

別の開発者と私は同じ ASP.NET Web アプリで作業しています。アプリケーションはフォーム認証を使用しますが、IIS 仮想ディレクトリは "匿名アクセス" と "統合 Windows 認証" の両方で構成されています。これは、必要に応じて認証する本番サイトを反映しています。

私たちの 2 つの設定の潜在的な重要な違いは、彼が Windows 7 と IIS 7 を使用しているのに対し、私は Windows XP と IIS 5 を使用していることです (念のため)。

最初に両方でアプリを実行すると、変数...

HttpContext.Current.User.Identity.IsAuthenticated
…嘘です。これは、フォーム認証で構成されているためです。その後、アプリは WindowsAuth.aspx ページにリダイレクトします。そのページは Request.ServerVariables["LOGON_USER"] サーバー変数をチェックし、これが null または空でない場合は、それを使用して自動的にサインインします。

問題は、私の PC では Request.ServerVariables["LOGON_USER"] が常に空であることです。匿名アクセスが有効になっているため、これは正しいことです。しかし、私の同僚の PC と本番環境では、変数はユーザーのユーザー名を保持しています。これがなぜなのか理解できません。この点で、IIS 5 と 7 の間に違いはありますか? そうでなければ、これを説明できますか?もちろん、セットアップに他の環境を反映させたいのですが、現時点では Windows 7 へのアップグレードは最後の手段です。

4

1 に答える 1

0

https://support.microsoft.com/en-us/kb/306359

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

Web.config ファイルの認証モードを [なし] 以外に変更します。たとえば、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" />

インターネット サービス マネージャーで、.aspx ファイルまたは Web プロジェクト フォルダーを右クリックし、[プロパティ] をクリックします。Web プロジェクト フォルダの [プロパティ] をクリックした場合は、[ディレクトリ セキュリティ] タブをクリックします。.aspx ファイルの [プロパティ] をクリックした場合は、[ファイル セキュリティ] タブをクリックします。

[匿名アクセスと認証制御] で、[編集] をクリックします。[認証方法] ダイアログ ボックスで、[匿名アクセス] チェック ボックスをオフにし、[基本]、[ダイジェスト]、または [統合 (NT チャレンジ/レスポンス)] チェック ボックスをオンにします。[OK] をクリックして両方のダイアログ ボックスを閉じます。

于 2015-09-23T13:49:33.563 に答える