기본 인증을 사용하여 인증 요청을 보내야합니다. jquery를 사용하여 성공적으로 구현했습니다. 그러나 401 오류가 발생하면 기본 인증 브라우저 팝업이 열리고 jquery ajax 오류 콜백이 호출되지 않습니다.
답변
나도 최근에이 문제에 직면했다. 401
( 기본 또는 다이제스트 인증)의 경우 팝업을 표시하는 브라우저의 기본 동작을 변경할 수 없기 때문에이 문제를 해결하는 두 가지 방법이 있습니다.
- 를 반환하지 않도록 서버 응답을 변경합니다
401
. 반환200
대신 코드를 jQuery 클라이언트에서 처리하십시오. -
인증에 사용하는 방법을 헤더의 사용자 지정 값으로 변경합니다. 브라우저는 기본 및 다이제스트에 대한 팝업을 표시합니다 . 클라이언트와 서버 모두에서이를 변경해야합니다.
headers : { "Authorization" : "BasicCustom" }
도 살펴 보시기 바랍니다 이 기본 인증과 jQuery를 사용하는 예를 들어.
답변
일반 400 상태 코드를 반환 한 다음 해당 클라이언트 측을 처리합니다.
또는 401을 유지하고 WWW-Authenticate 헤더를 반환하지 않을 수 있습니다. 실제로 브라우저가 인증 팝업으로 응답하는 것입니다. WWW-Authenticate 헤더가없는 경우 브라우저는 자격 증명을 요구하지 않습니다.
답변
다음과 같은 요청 URL로 기본 인증 팝업을 억제 할 수 있습니다.
https://username:password@example.com/admin/...
401 오류 (잘못된 사용자 이름 또는 암호)가 발생하면 jquery 오류 콜백으로 올바르게 처리됩니다. 일부 보안 문제를 일으킬 수 있지만 (https 대신 http 프로토콜의 경우) 작동합니다.
UPD : 이 솔루션 지원은 Chrome 59에서 제거됩니다.
답변
다른 사람들이 지적했듯이 브라우저의 동작을 변경하는 유일한 방법은 응답에 401 상태 코드가 포함되지 않았는지 또는 포함 된 경우 WWW-Authenticate: Basic
헤더를 포함하지 않는지 확인하는 것 입니다. 상태 코드를 변경하는 것은 그다지 의미가없고 바람직하지 않으므로 WWW-Authenticate
헤더 를 제거하는 것이 좋습니다 . 웹 서버 애플리케이션을 수정할 수 없거나 수정할 수없는 경우 언제든지 Apache를 통해 제공하거나 프록시 할 수 있습니다 (아파치를 아직 사용하지 않는 경우).
다음은 요청에 포함 된 WWW-Authenticate 헤더 IFF를 제거하기 위해 응답을 다시 작성하는 Apache의 구성입니다 X-Requested-With: XMLHttpRequest
(JQuery / AngularJS 등의 주요 Javascript 프레임 워크에서 기본적으로 설정 됨). 헤더 WWW-Authenticate: Basic
.
Apache 2.4에서 테스트되었습니다 (2.2에서 작동하는지 확실하지 않음). 이것은 mod_headers
설치 되는 모듈에 의존합니다 . (Debian / Ubuntu에서 sudo a2enmod headers
Apache 다시 시작)
<Location />
# Make sure that if it is an XHR request,
# we don't send back basic authentication header.
# This is to prevent the browser from displaying a basic auth login dialog.
Header unset WWW-Authenticate "expr=req('X-Requested-With') == 'XMLHttpRequest' && resp('WWW-Authenticate') =~ /^Basic/"
</Location>
답변
X-Requested-With : XMLHttpRequest를 요청 헤더와 함께 사용하십시오. 따라서 응답 헤더에는 WWW-Authenticate : Basic이 포함되지 않습니다.
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', ("Basic "
.concat(btoa(key))));
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
},
답변
IIS 서버를 사용하는 경우 IIS URL 다시 쓰기 (v2) WWW-Authentication
를 None
설정하여 요청 된 URL에 헤더를 다시 쓸 수 있습니다.
변경하려는 값은 response_www_authenticate
입니다.
더 많은 정보가 필요한 경우 의견을 추가하면 web.config 파일을 게시하겠습니다.
답변
WWW-Authenticate 헤더가 제거되면 자격 증명 캐싱을 얻지 못하고 요청에서 Authorization 헤더를 반환하지 않습니다. 즉, 이제 생성하는 모든 새 요청에 대해 자격 증명을 입력해야합니다.