prosource

HTTP 기본 인증을 사용하는 JQuery Ajax 호출

probook 2023. 8. 1. 20:36
반응형

HTTP 기본 인증을 사용하는 JQuery Ajax 호출

JQuery를 사용하여 통신하려는 REST 기반 서버가 있습니다.XML과 JSON 모두 응답 형식으로 사용할 수 있어서 JSON을 사용하고 있습니다.

연결은 모두 SSL이므로 HTTP Basic Authentication이 당사가 선택한 승인 방법이며, 다른 프런트 엔드(raw Javascript, Silverlight 등)에도 문제가 없었습니다.

지금 저는 JQuery와 함께 무언가를 만들려고 시도하고 있으며 HTTP Basic Authentication을 사용하여 끝없는 문제를 겪고 있습니다.

저는 수많은 이전 질문들을 뒤졌습니다. 대부분은 실제로 작동하지 않는 것처럼 보이는 해결책을 가지고 있거나 기본 자바스크립트 테스트에서 이미 극복한 크로스 오리진 액세스에 대한 전체 문제를 비난하고 있습니다. 응은항제니다됩을 제공합니다.Access-Control-Allow-Origin요청에서 제공된 오리진 헤더로 설정되며, 이것은 내 테스트의 응답에서 확인할 수 있습니다.

기본 자바스크립트에서 이 전체 통화는 매우 간단하게 다음과 같이 수행됩니다.

req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');

이에 대한 JQuery 시도는 상당히 일반적입니다.

        $.ajax({
        username: 'test',
        password: 'testpassword',
        url: 'https://researchdev-vm:8111/card',
        type: 'GET',
        dataType: 'json',
        crossDomain: true,
        /*data: { username: 'test', password: 'testpassword' },*/
        beforeSend: function(xhr){
            xhr.setRequestHeader("Authorization",
                //"Basic " + encodeBase64(username + ":" + password));
                "Basic AAAAAAAAAAAAAAAAAAA=");
        },
        sucess: function(result) {
            out('done');
        }
    });

하기 위해 하는 것으로 유일한 데이터를 입니다.beforeSend()이 포함되지 않으면.이것이 포함되지 않으면 어떠한 진전도 없습니다.사용자 이름 및 암호 속성이 완전히 무시된 것 같습니다.

beforeSend()동작이 제공되면 GET 호출은 데이터가 포함된 긍정적인 응답을 받습니다.는 GET 합니다. GET 가 사용되지 않기 입니다.beforeSend()따라서 인증 실패로 인해 401 응답을 받습니다.

아주 사소한 상담을 성사시킬 수 있는 더 좋은 방법이 있습니까?이 OPTIONS를 beforeSend()기능 처리가 버그로 간주됩니까?OPTIONS 검사를 완전히 비활성화할 수 있는 방법이 있습니까?Javascript는 동일한 컴퓨터의 다른 포트 번호라도 "크로스 사이트"로 간주하기 때문에 이 호출을 크로스 사이트로 만들 수 없습니다.

이 질문은 아마 만료일이 훨씬 지났을 것입니다만, 저는 Jquery와 같은 것을 작업하다가 같은 문제를 발견했습니다.

사용자 이름 및 암호 특성은 일반적으로 HTTP 기본 인증을 수행할 때처럼 사용자 이름/암호의 기본 64 인코딩을 수행하지 않는 것 같습니다.

JQuery AJAX 메서드에서 먼저 "사용자 이름" 및 "암호" 매개 변수를 사용하여 다음 요청(간단히 설명)을 확인합니다.

Request URL:http://testuser%40omnisoft.com:testuser@localhost:60023/Account
Request Method:GET
Accept:application/json, text/javascript, */*; q=0.01
Host:localhost:60023

이제 beforeSend 메서드를 사용합니다.

Request URL:http://localhost:60023/Account
Request Method:GET
Accept:application/json, text/javascript, */*; q=0.01
Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Host:localhost:60023

첫 번째 메서드는 요청에 'Authorization' 헤더를 포함하지 않고 대상 URL 앞에 붙입니다. 저는 HTTP 기본 인증에 대한 전문가는 아니지만, 전자가 적절한 구현이 아니므로 실패한다는 것을 나타냅니다(또는 적어도 제 서버 구현에서는 해당됨).

JSONP를 사용한 OPTIONS 요청에 대해서는 - 사용해 볼 수 있습니다.?callback=?사용하는 대신 URL에서crossdomain명시적으로 말하자면, 옵션.

이 문제를 겪고 있는 모든 사람들을 위해 Apache를 사용하여 OPTIONS 요청을 가로채고 GET와 POST만 백엔드로 전달하는 문제를 해결했습니다.

이 솔루션은 앱 서버에 의존하지 않으므로 PHP 및 Java에서도 작동합니다.

<VirtualHost *:80>

    # ServerName and other configuration...


    # CORS
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "OPTIONS, GET, PUT, POST" 
    Header set Access-Control-Allow-Headers "Authorization"

    # Intercept OPTIONS calls
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^(OPTIONS)$
    RewriteRule .* - [L]

    # Backend, adapt this line to fit your needs
    RewriteRule /(.*) ajp://localhost:8010/$1 [L,P]

</VirtualHost>

안녕하세요, 마우리치오

다음은 AJAX 호출에 대한 패스스루 인증 역할을 하는 것입니다.이것은 Javascript가 실행될 페이지에서 인증하기 위해 NTLM에 의존합니다.이것이 당신에게 도움이 될 것입니다.

PHP 코드:

<?php 
$headers = apache_request_headers();
if (isset($headers['Authorization'])) 
   echo "<script>var auth = " . $headers['Authorization'] . "</script>";
unset($headers);
?>

jQuery를 사용하면 다음과 같이 사용할 수 있습니다.

$.ajax({
        type: 'POST',
        url: './somePage.php',
        data: {"test":true},
        dataType: 'json',
        success: function(data) {
            console.log(data.username);
        },
        beforeSend : function(req) {
            req.setRequestHeader('Authorization', auth); // <<<<----- USED HERE
        },
});

표준 XMLHttpRequest의 경우:

var xml = new XMLHttpRequest();
xml.open('GET', './somePage.php', true);
xml.setRequestHeader('Authorization', auth); // <<<<----- USED HERE
xml.send();

언급URL : https://stackoverflow.com/questions/9692067/jquery-ajax-calls-with-http-basic-authentication

반응형