Was Internet Explorer verursachen würde den HTTP-HeaderInternet Explorer 11 ersetzt Authorization-Header
Authorization : Bearer <server-provided-token>
mit
Authorization : Negotiate <some token>
ersetzen, wenn eine Anfrage AJAX machen?
Einzelheiten
im Internet Explorer einige AJAX-Anfragen, die von Internet Explorer mit dem Header gesendet, um den Header Authorization: Bearer ...
werden Authorization: Negotiate ...
stattdessen enthalten konfiguriert sind.
Zum Beispiel zeigt Fiddler, dass die ersten zwei von drei Anfragen den Header Authorization : Bearer...
enthalten, während der dritte plötzlich den Header Authorization : Negotiate...
enthält. Die ersten beiden Anforderungen sind erfolgreich und die dritte schlägt fehl, da die Anforderung nicht ordnungsgemäß authentifiziert werden kann.
Alle Anforderungen werden mit demselben clientseitigen Code erstellt und nacheinander (innerhalb einer Sekunde) erstellt. Ich habe überprüft, dass der Header Authorization
korrekt das Token Bearer
in allen drei Fällen enthält, bis zu dem Punkt, an dem die Anfrage an den Browser gesendet wird.
Auch sehe ich nicht das gleiche Verhalten in Chrome; Es tritt nur in IE auf.
Antrag 1
GET http://localhost/myapp/api/User HTTP/1.1 Accept: application/json, text/plain, */* Authorization: Bearer oEXS5IBu9huepzW6jfh-POMA18AUA8yWZsPfBPZuFf_JJxq-DKIt0JDyPXSiGpmV_cpT8FlL3D1DN-Tv5ZbT73MTuBOd5y75-bsx9fZvOeJgg04JcO0cUajdCH2h5QlMP8TNwgTpHg-TR9FxyPk3Kw6bQ6tQCOkOwIG_FmEJpP89yrOsoYJoCfrAoZ7M4PVcik9F9qtPgXmWwXB2eHDtkls44wITF_yM_rPm5C47OPCvMVTPz30KwoEPi6fHUcL3qHauP-v9uypv2e48TyPHUwLYmNFxyafMhBx4TkovnRcsdLHZiHmSjMq0V9a2Vw70 Referer: http://localhost/client/login.html Accept-Language: en-US Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Host: localhost DNT: 1 Connection: Keep-Alive
Antrag 2
POST http://localhost/myapp/api/Permissions HTTP/1.1 Referer: http://localhost/client/#/Dashboard Content-Type: application/json Authorization: Bearer oEXS5IBu9huepzW6jfh-POMA18AUA8yWZsPfBPZuFf_JJxq-DKIt0JDyPXSiGpmV_cpT8FlL3D1DN-Tv5ZbT73MTuBOd5y75-bsx9fZvOeJgg04JcO0cUajdCH2h5QlMP8TNwgTpHg-TR9FxyPk3Kw6bQ6tQCOkOwIG_FmEJpP89yrOsoYJoCfrAoZ7M4PVcik9F9qtPgXmWwXB2eHDtkls44wITF_yM_rPm5C47OPCvMVTPz30KwoEPi6fHUcL3qHauP-v9uypv2e48TyPHUwLYmNFxyafMhBx4TkovnRcsdLHZiHmSjMq0V9a2Vw70 Accept: application/json, text/plain, */* Accept-Language: en-US Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Host: localhost Content-Length: 1419 DNT: 1 Connection: Keep-Alive Pragma: no-cache <Post Data Removed>
Antrag 3
GET http://localhost/myapp/api/UserPreferences/Dashboard HTTP/1.1 Referer: http://localhost/client/#/Dashboard Content-Type: application/json Authorization: Negotiate YHsGBisGAQUFAqBxMG+gMDAuBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHqI7BDlOVExNU1NQAAEAAACXsgjiBgAGADMAAAALAAsAKAAAAAYBsR0AAAAPVk1ERVZFTlYtU1JTQ0VSSVM= Accept: application/json, text/plain, */* Accept-Language: en-US Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Connection: Keep-Alive DNT: 1 Host: localhost
Die Anforderungen werden über den Dienst AngularJS $http
hergestellt werden, und das Back-End ist die in IIS gehostete ASP.NET-Web-API.
Hallo Shrichards - hast du das jemals herausgefunden? Ich scheine das gleiche Problem mit IE 11 zu begegnen. –
@JoshuaBarron Ich war nie in der Lage, die Ursache des Problems zu ermitteln.Ich habe das Problem gelöst, indem ich einen separaten Service mit der alleinigen Verantwortung für die Ausgabe von Tokens eingerichtet habe. In IIS wurde dieser Token-Dienst so konfiguriert, dass er sowohl die Windows- als auch die anonyme Authentifizierung unterstützt. Der Dienst, der die Token für die Authentifizierung verwendet hat, wurde dann so konfiguriert, dass die anonyme Authentifizierung nur in IIS verwendet wird (da die Authentifizierung über die Token in der Middleware erfolgte). Dies verhinderte, dass IE versuchte, eine integrierte Authentifizierung mit IIS durchzuführen, wenn auf den gesicherten Dienst zugegriffen wurde. – shrichards
Würden Sie bitte ein ausführlicheres Beispiel geben, wie Sie diesen Service gemacht haben (in Github oder Pastebin). Ich habe mehr als zwei Wochen mit diesem Problem verloren und kann immer noch keinen Workaround finden. Danke im Voraus. – Martin