Mam serwer oparty na REST, który próbuję komunikować się przy użyciu JQuery. Zarówno XML, jak i JSON są dostępne jako formaty odpowiedzi, więc używam JSON.Połączenia Ajax z JQuery z podstawowym uwierzytelnianiem HTTP
Połączenia SSL są tak podstawowego uwierzytelniania HTTP była nasza metoda autoryzacji z wyboru, a nie mieliśmy żadnych problemów z innymi przednimi końcami (surowe JavaScript, Silverlight, etc ...)
Teraz jestem próby umieścić coś razem z JQuery i mieć niekończące się problemy przy użyciu podstawowego uwierzytelniania HTTP.
Przeszukałem wiele wcześniejszych pytań, z których większość ma rozwiązania, które nie działają, ani nie obwiniają całego problemu związanego z dostępem krzyżowym, co już pokonałem w podstawowych testach JavaScript. Odpowiedzi zawsze dostarczają Access-Control-Allow-Origin
ustawionego nagłówka Origin w żądaniu, co można zobaczyć w odpowiedziach z moich testów.
W podstawowej javascript, cała ta rozmowa jest bardzo łatwo osiągnąć z:
req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');
jQuery próba ta jest dość standardowe:
$.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');
}
});
Jedyną metodą, która faktycznie wydaje się działać, aby zapewnić uwierzytelnianie to bezpośrednie wstawienie zakodowanych danych Base64 w funkcji beforeSend()
. Jeśli nie jest to uwzględnione, nie ma żadnych postępów. Nazwa użytkownika i hasło wydają się być całkowicie ignorowane.
Zgodnie z podanym warunkiem beforeSend()
, wywołanie GET uzyskuje pozytywną odpowiedź z dołączonymi danymi. Ponieważ jednak jest to połączenie między lokacjami, wywołanie OPTIONS jest wykonywane przed wywołaniem GET i zawsze kończy się niepowodzeniem, ponieważ nie korzysta z beforeSend()
i dlatego otrzymuje odpowiedź 401 z powodu nieudanego uwierzytelnienia.
Czy istnieje lepszy sposób osiągnięcia tego, co powinno być bardzo banalnym wywołaniem? Czy fakt, że żądanie OPTIONS nie korzysta z przetwarzania funkcji beforeSend()
, należy uznać za błąd? Czy jest być może sposób, aby całkowicie wyłączyć kontrolę OPTIONS? Nie można tego połączenia przekierować na drugą stronę, ponieważ JavaScript wydaje się uwzględniać nawet inny numer portu na tym samym komputerze co "cross-site".
Nie musisz mieć nazwę użytkownika/hasło pól przed wysyłać i . Chciałbym usunąć pola nazwa użytkownika/hasło z twojej funkcji $ .ajax. –