9

SPAアプリケーションのASP.NET 5でAntiForgeryトークンを正しく使用していますか? SPA印加時のASP.NETの以前のバージョンではAntiForgeyトークンのアイデアは、次のされた

  • @Html.AntiForgeryToken();ValidateJsonAntiForgeryTokenAttributeとしてAuthorizeAttribute ovverride要求
  • __RequestVerificationTokenを追加
  • ページ上に追加します。

私は本当に(いくつかの良い情報源がありますか?)の認可要件を理解していないASP.NET 5ではなく、新たな行動のように見えます。このようにする必要があります:

  • asp-anti-forgerytaghelper
  • を追加
  • ここに新しい要求があるはずです。

問題は次のとおりです。この新しい認証要件を作成し、標準の要件を削除する方法は?誰かがアドバイスをしたり、いくつかの例を教えてもらえますか? おかげMVC6で

+0

私はカストムミドルウェアを作成し、私の方法を使用するにはjsonか、標準を使用するかどうかを確認する必要があります。_antiforgery.ValidateRequestAsync(context); しかしそれについてまだよく分からない。このようなものhttps://github.com/aspnet/Antiforgery/blob/dev/samples/AntiforgerySample/FormPostSampleMiddleware.cs – Memfis

答えて

1

、あなたはこのようなものを使用する場合:

<form asp-controller="Account" 
     asp-action="Login"> 
</form> 

を自動的に取得します:あなたはその動作を無効にしたい場合は

<form action="/Account/Login" method="post"> 
    <input name="__RequestVerificationToken" type="hidden" value="...."> 
</form> 

asp-antiforgeryのみ使用されます。

ConfigureServicesConfigureメソッドでapp.AddMvc(...)を実行したときに検証自体が追加されました。

実際に追加されているものがたくさんあります。好奇心が強い場合は、check out the code

実際にを使用してアクションからこれを生成する場合、コントローラはIHtmlGeneratorに依存し、そのようにトークンを生成することができます。 AspNetCore 1.1.0.0で

+0

申し訳ありませんが、私は明確ではない場合。私はこれに同意しますが、あなたが言及したようにMVC6でのみ動作します。私はSPAについて尋ねています。フォームの送信ではなく、Angularによって送信された '__RequestVerificationToken'をどのように扱うべきでしょうか。 – Memfis

+1

答えが更新されました。基本的には、それは 'IAntiForgery'に依存する' IHtmlGenerator'から生成されます。これは異なる種類のクレイジー依存関係に依存します。それが存在することを確認する必要がある場合は、それがそれを行う方法です。または、あなたは単にそれをオフにすることができます。 –

0

(たぶんも以前のバージョンで)SPAのシナリオと、これは実際には非常に簡単です:

はあなたからあなたのインデックスページを提供していることを確認します。CSHTMLビューとあなたはjqueryのを使用している場合は、単にあなたは、このトークンを読み、それが内部HTTPヘッダ

$(document).ajaxSend(function(e, xhr, options) { 
    if (options.type.toUpperCase() != "GET") { 
     xhr.setRequestHeader("RequestVerificationToken", $("input[name='__RequestVerificationToken']").val()); 
    } 
}); 

内のすべての将来の非取得の要求で送信されたことを確認することができます

@Html.AntiForgeryToken() 

を追加するには、あなたがしたい場合は、コントローラの方法、ちょうど

[HttpPost] 
[ValidateAntiForgeryToken] 
public string TestAntiForgery() 
{ 
    return "success"; 
} 

を追加/ differenヘッダーを使用する必要がありますがconfigureServicesでこのようにそれを変更することができます。

services.Configure<AntiforgeryOptions>((options) => 
{ 
    // Configure a different header here 
    options.HeaderName = "otherHeaderName"; 
}); 
関連する問題