答えて

1

: あなたはasp-antiforgery="true"属性を追加することによって、この自動機能を有効/無効にすることができます。

  • [AutoValidateAntiforgeryToken]を使用して、すべての「安全でない」方法でトークンを検証します。 (GET、HEAD、TRACE、OPTIONS以外のメソッド)。
  • いつもあなたが必要な精度を達成するために、これらの属性を組み合わせることができ、トークンの検証に

を無視して使用[IgnoreAntiforgeryToken]

  • トークンを検証するために使用 [ValidateAntiforgeryToken]。たとえば:

    //Validate all 'unsafe' actions except the ones with the ignore attribute 
    [AutoValidateAntiforgeryToken] 
    public class MyApi: Controller 
    { 
        [HttpPost] 
        public IActionResult DoSomething(){ } 
        [HttpPut] 
        public IActionResult DoSomethingElse(){ } 
    
        [IgnoreAntiforgeryToken] 
        public IActionResult DoSomethingSafe(){ } 
    } 
    
    //Validate only explicit actions 
    public class ArticlesController: Controller 
    { 
        public IActionResult Index(){ } 
    
        [ValidateAntiforgeryToken] 
        [HttpPost] 
        public IActionResult Create(){ } 
    } 
    

    私はdocs siteで完全に準備ができてドキュメントイマイチに気づいたが、あなたはgithubのissueでのドラフトを見ることができます。

    1

    antiforgeryトークンが自動的に生成され、FormTagHelperによって付加されます。 Antiforgeryトークン検証があなたのコントローラにフィルタ属性を使用して自動的に行うことができます

    <form asp-controller="Account" asp-action="LogOff" asp-antiforgery="true" 
         method="post" id="logoutForm" class="navbar-right"> 
    </form> 
    
    1

    がDaniel`sの回答に基づいて、私は

    [HttpPost] 
    [AllowAnonymous] 
    [IgnoreAntiforgeryToken] 
    public ActionResult Index() 
    { 
        if (!User.Identity.IsAuthenticated) 
        { 
         return NewIndex(); 
        } 
    
        // rest of action 
    } 
    
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult NewIndex() 
    { 
        // body of new action 
    } 
    

    docs draftに基づいて別のオプションを、コードを変更し、サービスとしてAntiforgeryを注入しています。

    Project.json

    "Microsoft.AspNetCore.Antiforgery": "1.0.0" 
    

    Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IAntiforgery antiforgery) 
    { 
        ... 
    
    
    public void ConfigureServices(IServiceCollection services) 
    { 
        services.AddAntiforgery(); 
        ... 
    

    からコントローラの検証。

    public class MyController : Controller 
    { 
        private readonly IAntiforgery _antiforgery; 
    
        public AccountController(IAntiforgery antiforgery) 
        { 
         _antiforgery = antiforgery; 
        } 
    
        public ActionResult Index() 
        { 
         if (!User.Identity.IsAuthenticated) 
         { 
          await _antiforgery.ValidateRequestAsync(HttpContext); 
         } 
    
         // rest of action 
        } 
    
    } 
    
    関連する問題