401 Unauthorized beim Senden einer Ajax-Anfrage an die Web-API

8

Ich kratze mich seit zwei Tagen am Kopf. Ich benutze WebAPI Version 2.2 und ich verwende CORS. Diese Einrichtung funktioniert auf der Serverseite, ich darf autorisierten Inhalt von meinem Web-Client-Server-Code bekommen, aber in meinen Ajax-Anrufen nicht autorisiert werden.

Hier ist meine Konfiguration:

Web-API-Konfiguration

WebApiConfig:

%Vor%

Startup.Auth.cs:

%Vor%

(Ich habe jede Kombination aus app.UseCors (CorsOptions.AllowAll) und config.EnableCors ())

ausprobiert

Mein Controller-Attribut:

%Vor%

Web Client

Ajax-Aufruf:

%Vor%

Cookie-Erstellung:

%Vor%

Und nicht zuletzt meine Header.

%Vor%

Entwickler-Tools und Fiddler behaupten, dass keine Cookies mit der Anfrage gesendet wurden.

    
Dale Marshall 08.10.2014, 04:12
quelle

2 Antworten

3

Ich glaube, dass Sie hier zwischen Cookies Authentication und Bearer Tokens mischen, Sie senden mit Ihrer Anfrage kein Zugriffs-Token im Authorization Header, weshalb Sie weiterhin 401 erhalten. Außerdem müssen Sie CORS nur erlauben, application.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); zu verwenden und es sonst wo von Ihrem Controller-Attribut zu entfernen, sogar von der Konfiguration.

Überprüfen Sie meinen Repo hier , wo ich CORS implementiert habe und das Frontend ist auch AngularJS. es funktioniert richtig. Hier ist die Live-Demo für dieses Repo, offene Entwickler-Tools und Überwachung der Anfragen, sollten Sie Pre-Flug-Anfrage sehen, bevor Sie Ihre sehen HTTP get Anfrage.

Wenn Sie nur Ihre API mit Bearer-Tokens schützen müssen, dann empfehle ich Ihnen, Token-basierte Authentifizierung posten

    
Taiseer Joudeh 21.10.2014, 20:50
quelle
0

Dies könnte daran liegen, dass sich Ihre API nicht auf der URL "came" als aufrufende Anwendung befindet. Ihre URL für die API lautet: http://127.0.0.1/ (ignoriert den Ordnerpfad - spielt keine Rolle)

.. aber Sie rufen es von http://127.0.0.1:8888 an, das als separate Site zählt, da der Port anders ist. Da der Browser denkt, dass die Site anders ist, wird das Cookie nicht gesendet.

Haben Sie versucht, es auf einer Seite zu testen, die auf der gleichen URL gehostet wird wie die API (mit demselben Port)?

Am wichtigsten: Überprüfen Sie, ob das Cookie in Fiddler gesendet werden kann.

Sie finden möglicherweise auch weitere relevante Informationen dazu, wie dies funktioniert zu dieser Antwort

    
NickG 21.10.2014 13:41
quelle