Próbuję POST dane z mojego API, ale nie mogę przejść podstawowego uwierzytelnienia.
Próbuję:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
Odpowiedź mojej konfiguracji serwera to:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Nagłówki, które otrzymuję, to:
Nagłówki żądań
OPTIONS /api/v1/token-auth/ HTTP/1.1
Host: theappurl.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Access-Control-Request-Headers: origin, authorization, content-type
Accept: */*
Referer: http://127.0.0.1:8080/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Nagłówek odpowiedzi
HTTP/1.1 401 Unauthorized
Server: nginx/1.1.19
Date: Fri, 16 Aug 2013 01:29:21 GMT
Content-Type: text/html
Content-Length: 597
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted"
Domyślam się, że konfiguracja serwera jest dobra, ponieważ mogę uzyskać dostęp do API z poziomu zaawansowanego klienta REST (rozszerzenie Chrome)
Jakieś sugestie?
PD: Nagłówek, który otrzymuję od klienta Advanced REST to:
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Authorization: Basic [REDACTED]
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
i
Server: nginx/1.1.19
Date: Fri, 16 Aug 2013 01:07:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept, Cookie
Allow: POST, OPTIONS
X-Robots-Tag: noindex
wysyłanie OPCJA
Odpowiedzi:
Możesz dołączyć użytkownika i hasło jako część adresu URL:
więcej informacji pod tym adresem URL
Poświadczenia uwierzytelnienia podstawowego HTTP przekazane w adresie URL i szyfrowanie
oczywiście będziesz potrzebować hasła do nazwy użytkownika, nie jest
'Basic hashstring
.mam nadzieję że to pomoże...
źródło
The use of these URLs is deprecated
Na https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding i http://en.wikipedia.org/wiki/Basic_access_authentication , oto jak wykonać podstawowe uwierzytelnianie z nagłówkiem umieszczenia nazwy użytkownika i hasła w adresie URL. Zwróć uwagę, że to nadal nie powoduje ukrycia nazwy użytkownika ani hasła przed nikim, kto ma dostęp do sieci lub ten kod JS (np. Użytkownik wykonujący to w przeglądarce):
źródło
Odpowiedź NodeJS:
W przypadku, gdybyś chciał to zrobić z NodeJS: utwórz punkt końcowy GET do JSON z
Authorization
nagłówkiem i otrzymaj zPromise
powrotem:Pierwszy
( zobacz na npm ), a następnie w swoim
.js
pliku:źródło
Jeśli jesteś w środowisku przeglądarki, możesz również użyć btoa .
btoa
jest funkcją, która przyjmuje łańcuch jako argument i tworzy łańcuch ASCII zakodowany w standardzie Base64. Jest obsługiwany przez 97% przeglądarek .Przykład:
Następnie możesz dodać
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
doauthorization
nagłówka.Zauważ, że mają zastosowanie zwykłe zastrzeżenia dotyczące autoryzacji HTTP BASIC, co najważniejsze, jeśli nie wysyłasz swojego ruchu przez https, podsłuchiwany może po prostu zdekodować zakodowany ciąg Base64, uzyskując w ten sposób twoje hasło.
Ta odpowiedź na security.stackexchange.com daje dobry przegląd niektórych wad.
źródło
nie ma potrzeby używania użytkownika i hasła jako części adresu URL
możesz tego spróbować
źródło