programing

Internet Explorer 11이 Authorization 헤더를 대체합니다.

procenter 2023. 2. 11. 17:11
반응형

Internet Explorer 11이 Authorization 헤더를 대체합니다.

Internet Explorer가 HTTP 헤더를 대체하는 이유

Authorization : Bearer <server-provided-token>

와 함께

Authorization : Negotiate <some token>

AJAX 요청을 할 때?

세부 사항

Explorer에서는 Explorer를 AJAX Authorization: Bearer ... 헤더 "Internet Explorer"로 됩니다.Authorization: Negotiate ...★★★★★★ 。

를 들어,는 세 중 두 요구에는 Fiddler 3이 되어 있음을 .Authorization : Bearer...header에 "header"가 경우, "header"는 "header"입니다.Authorization : Negotiate...머리글처음 두 요청은 성공하고 세 번째 요청은 요청을 제대로 인증할 수 없기 때문에 실패합니다.

모든 요청은 동일한 클라이언트 측 코드를 사용하여 구성되며 (1초 이내에) 차례로 이루어집니다.했습니다.Authorization에 header가 .Bearer브라우저에 요청을 제공할 때까지 토큰을 사용합니다.

또, Chrome 에서는 같은 동작을 볼 수 없습니다.IE에서만 발생합니다.

리퀘스트

GET http://localhost/myapp/api/사용자 HTTP/1.1동의: 응용 프로그램/json, 텍스트/보통, */*인증:베어러 oEXS5IBu9huepzW6jfh-POMA18AUA8yWZsPfBPZuF_JXQ-DKIt0JyPXSiGpmV_cpT8FlL3D1DN-Tv5ZB73MTuBOd5y75-bsx9fZvOeJg04JcO0cUajdCH2h5QlMP8TNwgTpHg-TR9FxyPk3Kw6bQ6TQCOkOwIG_FmEJP89yrOsoYJoCfrAoZ7M4PVcik9F9qtPgXmWwXB2eHDtkls44wITF_yM_rPm5C47OPCVMVTPz30KwoEPI6fHUcL3qHauP-v9uypv2e48TyPHULYmNfxyafMhBx4TkovnRcsdLHziHmSjMq0V9a2Vw70참조처: http://localhost/client/login.htmlAccept-Language: en-USAccept-Encoding: gzip, deflate사용자 에이전트: Gecko와 같은 Mozilla/5.0 (Windows NT 6.1, WOW64, Trident/7.0, rv:11.0)호스트: localhostDNT: 1접속:킵얼라이브

리퀘스트

POST http://localhost/myapp/api/Permissions HTTP/1.1참조처: http://localhost/client/#/Dashboard콘텐츠 유형: 응용 프로그램/json인증:베어러 oEXS5IBu9huepzW6jfh-POMA18AUA8yWZsPfBPZuF_JXQ-DKIt0JyPXSiGpmV_cpT8FlL3D1DN-Tv5ZB73MTuBOd5y75-bsx9fZvOeJg04JcO0cUajdCH2h5QlMP8TNwgTpHg-TR9FxyPk3Kw6bQ6TQCOkOwIG_FmEJP89yrOsoYJoCfrAoZ7M4PVcik9F9qtPgXmWwXB2eHDtkls44wITF_yM_rPm5C47OPCVMVTPz30KwoEPI6fHUcL3qHauP-v9uypv2e48TyPHULYmNfxyafMhBx4TkovnRcsdLHziHmSjMq0V9a2Vw70동의: 응용 프로그램/json, 텍스트/보통, */*Accept-Language: en-USAccept-Encoding: gzip, deflate사용자 에이전트: Gecko와 같은 Mozilla/5.0 (Windows NT 6.1, WOW64, Trident/7.0, rv:11.0)호스트: localhost콘텐츠 길이: 1419DNT: 1접속:킵얼라이브플러그마: 캐시 없음
<데이터 삭제 후>

리퀘스트

GET http://localhost/myapp/api/User Preferences/Dashboard HTTP/1.1참조처: http://localhost/client/#/Dashboard콘텐츠 유형: 응용 프로그램/json인증:YHsGBisGAQ의 네고시에이트UFAqBxMG+gMDAuBgorBgEEAYI3AgIKBgkhkiC9xIBAGIGCSqGSIb3EgECAGYKWYBBAGCNwICHI7BDLOVEXNU1NQAAEAAACXsgjiBgAGADMAAAALAA아카AAAAYBSR0AAAAPVK1ERVZFTYtU1JTQ0VSSVM=동의: 응용 프로그램/json, 텍스트/보통, */*Accept-Language: en-USAccept-Encoding: gzip, deflate사용자 에이전트: Gecko와 같은 Mozilla/5.0 (Windows NT 6.1, WOW64, Trident/7.0, rv:11.0)접속:킵얼라이브DNT: 1호스트: localhost

은 Angular를 .JS$httpASP하다IIS의 NET Web API.

Internet Explorer에서 자격 정보를 캐싱하는 데 문제가 발생했습니다.다음 스크립트를 사용하여 문제를 해결할 수 있습니다.

document.execCommand('ClearAuthenticationCache', 'false');

참조: Wikipedia

저도 방금 이 문제를 접하게 되었습니다.

이상한 점은 개발 기계에서 정상적으로 동작하고 있다는 것입니다.그것은 제가 그것을 도입했을 때 문제였습니다.크롬, 파이어폭스 등에서도 정상적으로 동작했습니다.

IE가 사이트가 로컬 인트라넷존에 있는 것을 검출하고 있었기 때문에 자동적으로 로그인을 시도하고 있었던 것이 문제인 것으로 판명되었습니다(그룹 정책에 의해 설정되어 있습니다.이것은 내부 앱입니다).

회피책은 FQDN이 아닌 서버 이름(myserver 등)을 사용하는 경우 로컬 인트라넷 존을 자동 검출하는 것 뿐이지만 풀 A를 사용하는 것입니다.

Knockojs 어플리케이션에서도 같은 문제가 있었습니다.Chrome과 Firefox에서는 정상적으로 동작했지만 IE에서는 동작하지 않았습니다.

또한 Fiddler를 사용했는데 첫 번째 Ajax 콜이 의도대로 Bearer를 사용하여 정상적으로 반환된 것을 알 수 있었습니다.그러나 그 후 IE는 대신 네고시에이트 허가를 사용하여 후속 ajax 콜을 반복하여 루프하기 시작했습니다.

제 경우 IE의 타이밍 문제 같은 경우 렌더링 중에 데이터를 로드하는 Ajax 콜을 동기화하는 것으로 해결했습니다.

    me.loadLimits = function () {
      $.ajax({
        type: 'GET',
        dataType: 'json',
        contentType: 'application/json',
        url: '/api/workrate/limits',
        headers: me.headers,
        async: false,
        success: function (result) {
    ...

앵귤러 앱에서 여러 데이터 로드를 시작할 때도 이 문제가 발생했습니다.

브라우저를 검출하여 이 문제를 해결했습니다.IE가 콜 인덱스에 근거해 각 요구를 50밀리초 늦췄을 경우:

return $q(function(resolve, reject) {
 var delay = self.widget.useDelayLoading ? self.widget.index * 50 : 0;

 setTimeout(function() {
   restService.genericApi(self.widget.url, false).queryPost(json).$promise
    .then(
     function(r) { resolve(r); }, 
     function(e) { reject(e); }
    );
 }, delay);
});

재미있게도, 제가$timeout지연을 100ms로 늘려야 했다.

우리는 angular와 web api에서 비슷한 문제에 직면했었다.Windows 인증이 유효하게 되어 있는 루트 레벨의 리소스에 액세스 하려고 하면, 이 문제가 발생합니다.이 경우 응용 프로그램이 IIS 루트에서 favicon을 가져오려고 했습니다.이 요구가 무허가 상태가 되면 IE는 네고시에이션헤더를 사용하여 자원 취득을 시도합니다만, 다시 실패합니다.그러나 이 시점부터 IE는 우리의 bearer 토큰 대신 negotiate 헤더를 계속 전송합니다.이것은 IE 의 설정에 의한 것입니다.이것은 [Internet Options]-> [ Advanced ]탭 -> [Enable Integrated Windows Authentication]의 [Security]섹션의 [Internet Options](인터넷옵션)-> [Advanced](상세설정)-> [Enable Windows Authentication](통합 Windows 인증을 유효하게 한다)에 있는 것 같습니다(정확한 내용을

수정이 app.js 파일에서 앱이 액세스하려는 루트 수준 또는 리소스 위치에 대한 익명 액세스 권한을 부여(잘못된 옵션)하거나 document.execCommand("ClearAuthenticationCache", false)했습니다.

제 경우 IE는 잘못된 요청을 보내는 것을 번갈아 가며 두 번째 시도에서 좋은 요청을 보낸 다음 잘못된 요청을 계속했습니다.

IE의 재시도를 일으키기 위한 몇 가지 방법을 시도하면 Location 헤더에 동일한 요청 URL을 가진 307(Temporary Redirect)을 반환하면 문제가 해결됩니다.

예: "http://myUrl/api/service/" 요청의 경우

HTTP 307 Temporary Redirect
Location: http://myUrl/api/service/

IE가 적절한 데이터를 사용하여 콜을 재시도합니다.

편집: 이 메서드는 무한 루프가 발생할 수 있으므로 위험할 수 있습니다.회피책으로는 Location 헤더 내의 URL의 일부로 카운터를 반환하고 콜을 다시 수신했을 때 카운터를 분석하는 방법이 있습니다.

언급URL : https://stackoverflow.com/questions/28615850/internet-explorer-11-replaces-authorization-header

반응형