9

Nella precedente versione di ASP.NET durante l'applicazione SPA l'idea di AntiForgey gettone seguiva:Utilizzo corretto del token AntiForgery in ASP.NET 5 nell'applicazione SPA?

  • aggiungere @Html.AntiForgeryToken(); sulla pagina
  • aggiungere __RequestVerificationToken alla richiesta
  • ovverride AuthorizeAttribute come ValidateJsonAntiForgeryTokenAttribute.

Io non capisco i requisiti di autorizzazione (c'è qualche buona fonte di informazioni?) In ASP.NET 5, ma si presenta come nuovo comportamento dovrebbe essere simile a questo:

  • aggiungere asp-anti-forgerytaghelper
  • aggiungi __RequestVerificationToken alla richiesta
  • qui dovrebbe essere il nuovo requisito.

La domanda è: come scrivere questo nuovo requisito di autorizzazione e rimuovere quello standard? Qualcuno potrebbe dare qualche consiglio o indicarmi qualche esempio? Grazie

+0

Sembra che ho bisogno di creare il middleware di custome e controllare se è JSON a usare la mia strada o utilizzare lo standard attendi _antiforgery.ValidateRequestAsync (context); Ma ancora non ne sono sicuro. Qualcosa di simile a questo https://github.com/aspnet/Antiforgery/blob/dev/samples/AntiforgerySample/FormPostSampleMiddleware.cs – Memfis

risposta

1

Con MVC6, se si utilizza qualcosa di simile:

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

Si otterrà automaticamente:

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

asp-antiforgery verrebbero utilizzati solo se si desidera disattivare tale comportamento.

Come per la convalida stessa, è stato aggiunto quando hai fatto app.AddMvc(...) nel tuo metodo ConfigureServices e Configure.

In effetti ci sono un sacco di cose che vengono aggiunte e se sei curioso, puoi check out the code!

Se si desidera generare questo da un'azione utilizzando , è possibile avere un controller che dipende da IHtmlGenerator e generare il token in questo modo.

+0

Scusate se non ero chiaro. Sono d'accordo con questo, ma funziona solo con MVC6 come hai detto. Sto chiedendo di SPA. Come dovrei gestire '__RequestVerificationToken' che è stato inviato da Angular, ad esempio, non come un modulo di invio. – Memfis

+1

Risposta aggiornata. Fondamentalmente, è generato da 'IHtmlGenerator' che dipende da' IAntiForgery' che dipende da un tipo completamente diverso di dipendenze pazze. Se è necessario assicurarsi che sia presente, è il modo per farlo. O potresti semplicemente spegnerlo. –

0

In AspNetCore 1.1.0.0 (forse anche nelle versioni precedenti), con uno scenario Spa Questa è in realtà abbastanza semplice:

Assicurarsi di consegnare il pagina di indice da un.vista cshtml e basta aggiungere

@Html.AntiForgeryToken() 

Se si utilizza jQuery si può quindi leggere questo token e assicurarsi che sia inviato con tutte le future richieste non ottenere all'interno di un http-header

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

all'interno della vostra metodo di controllo, è sufficiente aggiungere

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

Se si vuole/deve utilizzare un colpo di testa differen si può cambiare come questo in configureServices:

services.Configure<AntiforgeryOptions>((options) => 
{ 
    // Configure a different header here 
    options.HeaderName = "otherHeaderName"; 
}); 
Problemi correlati