Điều gì sẽ gây ra Internet Explorer để thay thế các tiêu đề HTTPInternet Explorer 11 thay thế Authorization tiêu đề
Authorization : Bearer <server-provided-token>
với
Authorization : Negotiate <some token>
khi thực hiện một yêu cầu AJAX?
Chi tiết
Trong Internet Explorer, một số yêu cầu AJAX được cấu hình để chứa header Authorization: Bearer ...
đang được gửi bởi trình duyệt Internet Explorer với tiêu đề Authorization: Negotiate ...
để thay thế.
Ví dụ: Fiddler cho thấy rằng hai trong ba yêu cầu đầu tiên chứa tiêu đề Authorization : Bearer...
, trong khi thứ ba đột nhiên chứa tiêu đề Authorization : Negotiate...
. Hai yêu cầu đầu tiên là thành công và yêu cầu thứ ba không thành công do yêu cầu không thể được xác thực chính xác.
Tất cả các yêu cầu được xây dựng bằng cách sử dụng client-side code giống nhau, và được thực hiện một cái khác (trong khoảng thời gian một giây). Tôi đã xác minh rằng tiêu đề Authorization
có chứa mã thông báo Bearer
trong cả ba trường hợp cho đến khi yêu cầu được cung cấp cho trình duyệt.
Ngoài ra, tôi không thấy hành vi tương tự trong Chrome; nó chỉ xảy ra trong IE.
Yêu cầu 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
Yêu cầu 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>
Yêu cầu 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
Các yêu cầu là được thực hiện thông qua dịch vụ AngularJS $http
và back-end là ASP.NET Web API được lưu trữ trong IIS.
Hi shrichards - bạn đã bao giờ tìm ra điều này chưa? Tôi dường như đang gặp phải sự cố tương tự với IE 11. –
@JoshuaBarron Tôi chưa bao giờ có thể xác định được nguyên nhân gốc rễ của vấn đề.Tôi đã giải quyết vấn đề bằng cách tạo một dịch vụ riêng biệt với trách nhiệm duy nhất là phát hành mã thông báo. Trong IIS, dịch vụ token đó đã được cấu hình để hỗ trợ cả xác thực Windows và Anonymous. Dịch vụ sử dụng mã thông báo cho auth sau đó được cấu hình để sử dụng xác thực ẩn danh chỉ trong IIS (vì auth đã được xử lý thông qua các mã thông báo trong phần mềm trung gian). Điều này khiến IE không thể thực hiện auth tích hợp với IIS khi dịch vụ bảo mật được truy cập. – shrichards
Bạn vui lòng cung cấp ví dụ chi tiết hơn về cách bạn thực hiện dịch vụ này (trong github hoặc pastebin). Tôi mất hơn hai tuần với vấn đề đó và vẫn không thể tìm được một công việc xung quanh. Cảm ơn trước. – Martin