2

フォーム認証で Web API コントローラー サービスへのアクセスを構成する方法を決定しようとしています。承認要素を追加して、すべての匿名ユーザーを拒否する承認構成を追加すると、次のようになります。

<authorization>
   <!-- すべての匿名ユーザーを拒否 -->
   <deny users="?" />
</認可>

期待どおり、ログイン ページのみにアクセスできます。しかし、コントローラーから返されたリストにもアクセスしたいと思います。[AllowAnonymous] 属性を、ドロップダウン メニューの入力に使用される値を返す単純なサービスに追加しました。例えば:

namespace WebAPI.Controllers
{
    public class RegisterController : ApiController
    {
        [AllowAnonymous]
        public List<ListElement> GetActivitiesList()
        {
            List<ListElement> li = new List<ListElement>();

            li.Add(new ListElement() { Id = 1, Text = "Item 1" });
            li.Add(new ListElement() { Id = 2, Text = "Item 2" });
            li.Add(new ListElement() { Id = 3, Text = "Item 3" });

            return li;

        }

    }
}

controllers ディレクトリを web.config の許可リストに追加しました。

<location path="Controllers">
   <system.web>
   <authorization>
      <allow users="*" />
   </authorization>
   </system.web>
</location>

サンプル ページを参照してコントローラーを呼び出すと、[AllowAnonymous] 属性を追加しても、フォーム認証はログイン ページへの 302 リダイレクトでアクセスを拒否します。サイト全体の認証要素「<deny users="?" />」を削除すると、[Authorize] 属性と [AllowAnonymous] 属性を使用してアクセスを制御できます。

目的は、匿名ユーザーがいくつかのページ (登録など) で特定のサービスを使用できるようにすることですが、残りのサイト アクセスは認証済みユーザーに制限されます。サービスへのアクセスは、ファイルへのアクセスとまったく同じではないため、この状況に対応する特別なハンドラーを作成する必要があると思いますが、どうすればよいかわかりません。

4

2 に答える 2

5

まず、ASP.NET MVC を使用している場合は、従来の ASP.NET 許可/拒否メカニズムを使用してアクセスを制御しないでください。これはサポートされていないと思います。代わりに、サイト ( source ) にセキュリティ ホールが作成される可能性があります。ASP.NET MVC でアクセスを制御する正しい方法は、質問で言及したように、コントローラー クラスやメソッドで [Authorize] および [AllowAnonymous] 属性を使用することです。

アプリケーション全体でいくつかのメソッドを除くすべてのメソッドでログインが必要になるようにしたい場合は、クラス レベルで [Authorize] 属性をすべてのコントローラーに適用してから、メソッド レベルで [AllowAnonymous] 属性を適用します。認証を必要としないメソッド用。[Authorize] 属性がまだ適用されていないコントローラーに [Authorize] 属性をプログラムで自動的に適用するように、FilterProvider を作成する方法もあります。[Authorize] 属性を誤って適用するのを忘れないので、これは便利です。この記事を見るその方法の詳細については。MVC4 で導入された [AllowAnonymous] 属性は、著者が記事で説明しているカスタム [Public] 属性と同じ機能を実行することに注意してください。一般的な MVC アプリケーションの保護について説明しているこの記事も参照してください。どちらの記事も少し古くなっています (2011 年) が、基本的な考え方は今でも健全です。

于 2012-12-24T06:28:00.290 に答える
0

したがって、まず第一に、アプリの残りの部分については何も知りません-それはMVCですか、それともWebFormsですか?

アプリがMVCの場合、すべてのコントローラーで[Authorize]と[AllowAnoynmous]を使用する必要があることにBrianに完全に同意します。

それができない場合は、実際にルールに「穴を開ける」ことができますが、次のような「実際の」URLを使用する必要があります。

..そしてええ-注意してください;)

于 2012-12-24T10:16:40.770 に答える