인증이 필요한 ajax 호출을 수행 할 때 브라우저의 "인증 필수"대화를 억제하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1626919

  •  06-07-2019
  •  | 
  •  

문제

내 사용자는 타사 서비스의 사용자 이름과 비밀번호를 입력합니다. 나는 그 서비스에 Ajax 전화를 걸어 그것을 인증합니다. 문제는 잘못된 사용자 이름과 암호를 입력하면 브라우저 (최소 Firefox)에 "인증 필요한"대화 상자가 표시된다는 것입니다. 그런 다음 해당 대화 상자에서 올바른 사용자 이름과 암호를 입력하면 AJAX 호출이 "성공"을 반환하며 입력 한 원래 사용자/패스가 (변경되지 않았기 때문에) 올바른 것으로 보입니다.

이 대화 상자를 억제하는 방법이 있습니까 (따라서 내 서비스가 사용자/패스를 수정하도록 지시하도록 할 수 있습니까?) 또는 사용자가 브라우저 대화 상자에 입력 한 올바른 사용자 이름과 비밀번호를 잡을 수 있습니까? 이것은 Firefox 확장자입니다. 따라서 요청에서 올바른 패스/로그인을 잡을 수있는 방법이 있다고 확신합니다. 그러나 JavaScript를 통해 더 간단한 방법이 있으면 좋을 것입니다.

jQuery.ajax({
  type: "GET",
  dataType: "xml",
  url: endpoint,
  username: username,
  password: password,
  success: function(data,status) {
    // Do something
  },
  error: function(XMLHttpRequest, textStatus, errorThrown){
    alert(errorThrown);
  }
});
도움이 되었습니까?

해결책

브라우저와 인증이 필요한 서비스 사이에 프록시를 넣어 Java Servlet을 사용 하여이 문제를 해결했습니다. 브라우저는 ajax 요청을 서블릿으로 보내어 서비스 요청을 전달한 다음 "www authenticate"헤더를 생략하여 서비스의 응답을 다시 발송합니다. 브라우저 앱. 그에 따라 HTTP 200 또는 401 응답 코드를 처리합니다.

마찬가지로, 프록시는 항상 전달 된 요청의 결과를 나타내는 JSON 응답으로 200을 반환 할 수 있습니다. 이렇게하면 프록시 실패와 서비스 응답의 차이를 식별 할 수 있습니다.

원거리 서비스가 세트 쿠키 헤더로 응답하는 경우, 고객을위한 세션을 만들었으므로 최소한 2 개의 가능한 경로를 가지고 있다고 말하면됩니다.

  1. 프록시는 쿠키, 브라우저 앱을 기억합니다. 이 서비스의 프록시를 항상 통과하고 프록시는이 쿠키를 후속 전달 된 요청에 추가합니다. 또는
  2. 서비스의 쿠키를 무시하고 프록시를 통해 사용자 이름과 비밀번호를 확인한 후에는 서비스와 직접 브라우저가 서비스를 직접 재 승인하도록합니다. 이것은 서비스와 고아 세션을 만드는 부작용이있을 수 있습니다.

다른 팁

URL 문자열 대신 "http://blah.com", 만들어"http : // user : password@blah.com"

// Note that you might need to trim http:// out of endpoint first
url: 'http://' + username + ':' + password + '@' + endpoint,

jQuery가 없으면 (즉, IE에서는 작동하지 않지만 Firefox 확장에는 괜찮습니다) :

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://example.com", true, "username", "password");
xhr.onreadystatechange = function(){
  if(this.readyState == 4){
    if(this.status == 200){
      alert("we got a response");
    }
  }
}
xhr.send();

HTTP 인증을 사용하지 않는 것은 어떻습니까? 쿠키와 함께 표준 로그인을 사용하거나 사용자 이름/비밀번호를 스크립트에 제공하는 간단히 게시하고 사용자 데이터베이스에 대한 세부 정보를 확인하십시오.

IE 또는 Firefox에서는 할 수 없으며 보안상의 이유로 JavaScript에서 얻을 수 없습니다. 사용자가 HTTP 인증을받는 프롬프트를 피할 수있는 브라우저 설정이 없습니다. HTTP 인증이 필요한 50 개의 이미지가 있으면 정말 성가시다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top