1

MVC を統合する従来の ASP.Net Web サイトがあります。web.config で標準の認証タグを使用して Web フォーム認証を使用します。

<authorization>
  <deny users="?"/>
</authorization>

過去に、次のような場所を使用してさまざまなフォルダーを公開できました。

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

MVC といくつかのコントローラーを追加したので、いくつかのコントローラー アクションを完全に公開する必要があります。ただし、web.config のロケーション タグを使用してこれを行うことはできません。認証されていないときにアクションの URL にアクセスしようとすると、ASP.Net によってログイン ページ (web.config で指定) にリダイレクトされます。これらのコントローラー アクションのいずれにも Authorization 属性を使用していません。

保護が必要なすべての Web フォームへのセキュリティを破る範囲内で、これらへのアクセスを開くにはどうすればよいですか?

編集:

保護したいアクションに対して [Authorize] を使用していることを明確にしたいと思います。公開したい質問のアクションは [Authorize] 属性を使用しておらず、ログインしない限りアクセスできません。

編集2:

私はいくつかの IIS トレースを実行しましたが、これは実際に認証の失敗であり、他のエラーではないことを確信していると思います。アクセスしようとしている場所とルートの例を次に示します。

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

そしてルート:

routes.MapRoute(
          "WC", // Route name
          "WC/{id}",
          new { action = "GetWC", controller = "WC" } // URL with parameters
        );

そして、失敗している URL:

http://localhost/MyWebApp/WC/42

私は実際にこれを処理するより一般的なルートを持っていますが、疑問を取り除くためにこれを追加しました。いずれにせよ、これはログインした状態で正常に機能します。

4

2 に答える 2

0

おそらく、ActionFilterAttribute を使用して、特定のメソッドを認証を必要とするものとして装飾し、コントローラー自体を公開できると思います。

于 2011-01-04T20:15:44.157 に答える
0

を使用しSystem.Web.Mvc.AuthorizeAttributeます。コントローラー クラス自体をデコレートするか (すべてのアクション メソッドが保護されるようになります)、アクション メソッド自体をデコレートして、より細かい制御を行うことができます。

どちらも装飾されていない場合は、すべてのユーザー (匿名を含む) が呼び出すことができます。単純に を使用する[Authorize]と、許可されたユーザーのみがアクション メソッドを呼び出すことができます。ロールのコンマ区切りリストを渡して、アクション メソッドを呼び出すためにユーザーが少なくとも 1 つのロールを持っている必要があるリストを指定することもできます。

于 2011-01-04T20:19:56.293 に答える