Web-Api-2-Preflight-CORS Anfrage für Bearer-Token
Ich habe eine web-app mit AngularJS Frontend-und Web-Api-2-back-end, und es verwendet bearer-Token für die Authentifizierung.
Alles ist gut in FireFox & IE, aber bei Chrome, meine erste Anmeldung ist MANCHMAL pre-flighted.
Hier ist der Anruf von der AngularJS-service:
$http.post (http://localhost:55483/token
- , Daten -, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).Erfolg(function (response) { ... });
Den preflight-Anfrage gekickt wird wieder mit einer "Allow-Access-Control-Origin" - Fehler.
Jedoch, wenn ich auf die Login-Taste (dadurch wird das erneute senden der obigen Anfrage) ist alles gut.
Irgendeine Idee, wie man verhindern/auffangen/umgehen?
PS: ich benutze die LOC
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
in der ApplicationOAuthProvider.cs
Datei zu setzen, die CORS-allow-header, auf den /Token anfordern, das funktioniert in IE, FireFox und manchmal Chrome.
- Hast du add
allowcors
im Autostart fürwebapi
? - Meinst du diese LOC: app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); ich versuchte zu setzen, dass in, aber der compiler sagt: Owin.IAppBuilder' enthält keine definition für 'UseCors'
- Ja, es sieht ähnlich aus, aber Sie müssen möglicherweise auch einige nuget-Paket für cors
- Hab die Owin.Cors NuGet-Paket Hinzugefügt, in der AllowAll Sache - immer noch dasselbe problem. Dass "AllowAll" scheint nur für die Web-Api-Controller und nicht der /Token-route.
- Dachte, dies mit Hilfe von post durch LeftyX am Jun 29: Verschieben Sie diese LOC-app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); die ERSTE ZEILE in der ConfigureAuth Methode von Startup.Auth.cs. Dann, ENTFERNEN Sie diese LOC Kontext.OwinContext.Antwort.Header.Add("Access-Control-Allow-Origin", new[] { "*" }); aus der GrantResourceOwnerCredentials () - Methode der ApplicationOAuthProvide.cs. Preflight-CORS-request bekommt, richtig gehandhabt, und dann die eigentliche requet geht durch.
- Danke FancyNancy für deinen Kommentar! Können Sie Ihren Kommentar eine Antwort auf diese Frage? Dein Kommentar war die einzige Antwort, die für mich gearbeitet! Ich bin sicher, jemand anderes würde schätzen eine Antwort angegeben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die unten ist Fancy Kommentar:
Danke Mann, Sie retten mir den ganzen Tag.
Ursache es viele Jungs, bringe ich Ihren Kommentar zu beantworten-box für die anderen Jungs es sehen können.
Ich will nicht um Stimmen für diese. Bitte Kommentar auf meine Antwort, statt
Danke
context.OwinContext.Response.Headers.SetValues("Access-Control-Allow-Origin", allowedOriginStr);
Ich hoffe, das ist in der Lage, jemandem zu helfen gibt. Für mich:
app.useCors();
LOC hat nicht funktioniert.app.useCors();
LOC gearbeitet, für andere Leute in meinem team.Also brauchte ich eine Lösung, die funktionieren würde über jeden-Umgebungen.
Letztlich, was ich am Ende tun war das hinzufügen von header und Wert rechts in der Web.config mit den folgenden (wobei localhost:9000 ist mein Knoten-Anwendung, die den Dienst bis eckig):
Dann in der Produktion können Sie nur ändern, die Herkunft Wert auf die Herstellung front-end-url.
Wenn Sie möchten, CORS aktiviert für alle Ursprünge, ändern Sie den Wert auf
"*"
.Durch die default - Access-Control-Max-Age: Sekunden 0 ist und Ihren Anforderungen nicht Zwischenspeichern.
Versuchen, legen Sie es auf max-Wert: (Owin selfhost). Es löse problem mit extra-OPTIONEN-Anforderungen