web-dev-qa-db-ja.com

MVCの特定のページへの匿名ユーザーアクセスを許可する方法

ASP.NET MVC Webアプリケーションでフォーム認証を有効にしました。 Register.cshtmlなどの特定のページのみに匿名ユーザーがアクセスできるようにします。これにより、ルートweb.configからCSSファイルへのアクセスを許可することができました。

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

ここで、HomeやRegisterなどの他のページへの匿名アクセスを許可したいと思います。これを達成する方法を知っている人はいますか?

31
Johnson Duru

MVCでは通常、[Authorize]属性を使用して承認を管理します。その属性で服を着たコントローラーまたは個々のアクションは、それらにアクセスするためにユーザーが許可されることを要求します-他のすべてのアクションは匿名ユーザーが利用できます。

つまり、[Authorize]を使用して匿名ユーザーの認証が必要なアクションをブラックリストに登録するブラックリストアプローチ-すべてのアクション(属性を付けない)が利用可能になります。

更新:

MVC4では、新しい属性、つまり[AllowAnonymous]属性が導入されました。 [Authorize]属性とともに、代わりにホワイトリストアプローチを使用できるようになりました。ホワイトリストアプローチは、コントローラー全体を[Authorize]属性でドレスアップして、そのコントローラー内のすべてのアクションの承認を強制することで実現されます。次に、[AllowAnonymous]属性を使用して、許可を必要としない特定のアクションをドレスアップし、それらのアクションのみをホワイトリストに登録できます。このアプローチを使用すると、誤って[Authorize]を使用してアクションをドレスアップすることを忘れないようにできます。

コードは次のようになります。

[Authorize]
public class UserController : Controller {

   [AllowAnonymous]
   public ActionResult LogIn () {
      // This action can be accessed by unauthorized users
   }

   public ActionResult UserDetails () {
      // This action can NOT be accessed by unauthorized users
   }
}
50

Web.configでは、以下の承認がありました

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

これにより

[AllowAnonymous]

正しく動作しないため、Web.configの承認を削除する必要があり、すべてのコントローラーで行を追加しました

[Authorize]

クラスの宣言の前に、正しく動作するようにします。

7
Josue Morales