Ich versuche gerade, die Sicherheit mit Angular 4 (4.3.5) auf dem neu veröffentlichten Asp.Net Core 2.0 und speziell Anti-Fälschungs-Token richtig zu machen.ValidateAntiForgeryToken funktioniert mit Angular 4 und Asp.Net Core 2
Ich benutze JavascriptServices, die die Starter-Anwendung bietet (es ist die Standard-Angular-Vorlage in Visual Studio 2017.3). Javascript-Dienste hostet die Hauptseite der Angular-Site auf einer .cshtml-Seite. Dies erweist sich als ziemlich vorteilhaft, da ich dann alles unter Verwendung der Standardformularauthentifizierung (dot net core Identity) absperren kann, die den Benutzer auf eine separate (nicht eckige) Anmeldeseite um/Account/Login umleitet, wenn der Benutzer dies nicht tut eingeloggt. Sie können sich dann auf dieser Seite einloggen und auf die Homepage weitergeleitet werden, und der Whirlpool läuft im Kontext des berechtigten Benutzers.
Diese funktionierende Anwendung kann here gefunden werden.
Das letzte Teil des Puzzles ist das Erhalten der ValidateAntiForgeryToken Attribute. Dies ist in Ordnung, wenn Sie sich auf der Account/Login-Seite anmelden, da es nicht im Kontext von angular 4 läuft. Aber wenn ich innerhalb von Angular 4 auf der Startseite läuft, wenn ich einen Post zurück auf den Server mache, wird der Post wird von ValidateAntiForgeryToken blockiert, wenn dieses Attribut vorhanden ist.
Aus diesem Grund habe ich das ValidateAntiForgeryToken-Attribut in der Account/Logout-Methode auskommentiert. Dies liegt daran, dass ich mich von der Site mithilfe eines Angular-HTTP-Posts abmelde. Es funktioniert, wenn das Attribut nicht verwendet wird, aber es schlägt fehl/ist blockiert, wenn es verwendet wird.
Im Anschluss an die Angular 4-Dokumentation, gefunden here, habe ich den Anti-Fälschungs-Token-Namen geändert, um zu entsprechen, was Angular 4 erkennt. Um dies zu tun, modifizierte ich meine Startup.cs Datei, indem in einigen Zeilen wie folgt:
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(options =>
{
options.Cookie.Name = "XSRF-TOKEN";
options.Cookie.HttpOnly = false;
});
...
}
Dies sollte die Angular App aktivieren, um die Anti Forgery Cookie Zugriff mit dem Namen Angular 4 erwartet.
Innerhalb meiner App habe ich gerade gewechselt, um den neuen HttpClient-Dienst zu verwenden (anscheinend wurde der HTTP-Dienst veraltet!), Der einen Interceptor verwenden soll, um das XSRF_TOKEN automatisch an den Server zu senden.
Aber ich konnte diese Arbeit nicht machen.
habe ich versucht, einen Standard-Anruf Post den Httpclient-Dienst:
this.httpClient.post(this.baseUrl + 'Account/Logout', "", options).subscribe(result => {
location.replace("/");
}, error => {
console.error(error);
})
Ich versuchte Header manuell hinzufügen:
let token = this.cookieService.get("XSRF-TOKEN");
console.log(token);
var httpHeaders = new HttpHeaders({ 'XSRF-TOKEN': token })
this.httpClient.post(this.baseUrl + 'Account/Logout', "", { headers: httpHeaders }).subscribe(result => {
location.replace("/");
}, error => {
console.error(error);
})
Ich versuchte, den alten Service mit sowohl mit als auch ohne Zusatz-Header:
let token = this.cookieService.get("XSRF-TOKEN");
console.log(token);
let headers = new Headers({
//'Content-Type': 'application/json',
'X-XSRF-TOKEN': token
});
let options = new RequestOptions({ headers: headers });
this.http.post(this.baseUrl + 'Account/Logout', "", options).subscribe(result => {
location.replace("/")
}, error => console.error(error));
Leider hatte ich kein Glück. Hat es noch jemand geschafft, dass das funktioniert?