2010-07-26 5 views
5
  1. Google 크롬 플러그인을 개발 중입니다.
  2. 암호가 필요한 서버에 AJAX 요청을 실행 중입니다.
  3. 암호가 올바르지 만 브라우저가 팝업 창을 표시하면 오류를 catch하고 싶습니다.

alt text http://img834.imageshack.us/img834/2905/browserproblem.png브라우저 기본 암호 팝업을 비활성화하는 방법은 무엇입니까?

나는 그것을 사용하지 않고 어떻게 할 수 있습니까?

+0

누구? 아마도 추측일까요? – simple

답변

4

문제는 전송중인 사용자 이름 (즉, 인증 토큰) 및 (더미) 암호를 Base64 인코딩하지 않는 것입니다 (HTTP 기본 인증 방식의 요구 사항 임).

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://onsip.highrisehq.com/account.xml'); 
xhr.setRequestHeader('Authorization', 'Basic ' + btoa(token + ':')); 
xhr.onreadystatechange = function() { console.log(xhr.responseText); }; 
xhr.send(); 

(. 내가 당신을 위해 하위 도메인으로 'onsip'에 교환,하지만 당신은 여전히 ​​당신의 인증 토큰으로 token를 교체해야합니다)

+1

확실하지 않은 경우 시도 var xhr = new HMLHttpRequest(); xhr.open ('GET', 'UrlToServerThatUsesBasicHttpAuthentication', true, Login, WrongPassword); xhr.send(); – simple

+0

byoogle은 GET 기반 기본 인증 대신 37signals.com에서 POST 기반 인증을 사용하는 것이 무엇을 말하고 싶습니까? – chx

+0

맞습니다. "POST"를 사용해야합니다. Highrise 로그인 페이지에 대해 패킷 스니퍼를 실행하여 위의 매개 변수를 얻었으므로 페이지가 전송하는 것과 정확하게 일치해야합니다 (페이지 소스를 볼 경우 양식 메서드가 "POST"로 설정되어있는 것을 볼 수 있습니다 "GET"). 나는 그들이 나를 위해 일하기 때문에 내가 지나가고있는 매개 변수를 복사 해 보는 것이 좋습니다. – oldestlivingboy

0

내가 아는 두 가지 방법 중 하나를 : 여기에 대략 무엇 코드는 다음과 같다한다고 Firefox XUL 코드 (웹 코드가 아님)에서이 작업을 수행 할 수 있습니다. 그 중 하나는 Google 크롬에 적용되지 않으며, 빠른 테스트는 다른 하나도 표시하지 않는 것으로 보입니다.

세 가지 옵션이 나에게 발생합니다.

  1. 는 (물론 보안 연결을 통해) 쿼리 접근 서버 (이상적으로 동일 하나)에 암호 검사 페이지가 사용자/패스 조합이 올바른지 여부의 표시로 응답합니다. 이 서비스를 실행하는 서버와 관련된 사람이 아닌 경우 수 천명이 facebook et al에게 맡기고 있지만이 일을하는 동안 나는 기분이 좋을 것입니다. 항상 이런 종류의 일을해라! 다른 한편으로는, facebook et al을시키는 것처럼 그렇게 바보가되지 않을 정도로 사람들을 설득하는 것은 어렵습니다. 이 일을 항상해라. 그러면 같은 일을하는 다른 사람이 문제를 도와주지 않을 것이다.
  2. 사용자에게 비밀번호를 묻지 마십시오. 모든 경우에 내장 프롬프트가 사용되며 "일반"사용자/패스가됩니다. 개인적으로, 심지어 폼 인증처럼 보이는 것보다 암호화 된 채널을 사용하고 있기 때문에 기본 버전을 사용하고 있다는 생각이 더 행복해집니다 (다이제스트 또는 실제 모델에 숨겨진 일부 암호가있는 다른 모델만큼 행복하지는 않습니다. 프로토콜). 암호가 전송 된 이상하고 어리석은 것들을 모두 수행 할 수 있기 때문에 "안전한 코드를 작성할 수있는 사람이 양식을 만들 가능성이 더 높습니다. 무엇을 생각해야합니까?" 다른 어떤 계획보다.
  3. 자신의 서버 인 경우 401 이외의 다른 비밀번호로 잘못된 비밀번호에 응답하고이를 스크립트의 신호로 사용하여 다시 쿼리 할 수 ​​있습니다. 이것을 위해 특별한 "로그인"URI를 갖는 것이 가장 좋을 것입니다. 따라서 XMLHttpRequest에 대한이 kludge가 더 잘 작동하는 클라이언트와 간섭하지 않도록해야합니다.
+0

Re : # 3, 대부분의 브라우저에서 WWW-Authenticate 헤더가 없기 때문에 상태가 401 인 경우에도 auth 팝업이 표시되지 않습니다. 물론 WWW-Authenticate 헤더가없는 상태 401은 사양을 위반하지만 ... 인증 실패를 위해 401 이외의 다른 것. 이것이 왜곡 된 이유입니다. 실제로, XmlHttpRequest 객체는 팝업을 비활성화하는 설정을 가져야합니다 ... –

관련 문제