Ich versuche, Daten von meiner API zu POSTEN, kann jedoch die Basisauthentifizierung nicht bestehen.
Ich versuche:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
Meine Antwort auf die Serverkonfiguration lautet:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Die Überschriften, die ich bekomme, sind:
Header anfordern
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
Antwortheader
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"
Ich denke, die Serverkonfiguration ist gut, da ich vom Advanced REST Client (Chrome Extension) auf die API zugreifen kann.
Irgendwelche Vorschläge?
PD: Der Header, den ich vom Advanced REST-Client erhalte, lautet:
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
und
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
OPTION-Methode senden
Antworten:
Sie können den Benutzer und das Kennwort als Teil der URL angeben:
Weitere Informationen finden Sie unter dieser URL
Anmeldeinformationen für die HTTP-Basisauthentifizierung, die in URL und Verschlüsselung übergeben wurden
Natürlich benötigen Sie das Benutzername-Passwort, nicht
'Basic hashstring
.hoffe das hilft...
quelle
The use of these URLs is deprecated
Unter https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding und http://en.wikipedia.org/wiki/Basic_access_authentication erfahren Sie hier, wie Sie die Standardauthentifizierung stattdessen mit einem Header durchführen den Benutzernamen und das Passwort in die URL zu setzen. Beachten Sie, dass dadurch der Benutzername oder das Kennwort immer noch nicht vor Personen verborgen wird, die Zugriff auf das Netzwerk oder diesen JS-Code haben (z. B. einem Benutzer, der ihn in einem Browser ausführt):
quelle
Antwort von NodeJS:
Falls Sie dies mit NodeJS tun wollten: Erstellen Sie einen GET to JSON-Endpunkt mit
Authorization
Header und erhalten Sie eine RückmeldungPromise
:Zuerst
( siehe auf npm ) und dann in Ihrer
.js
Datei:quelle
Wenn Sie sich in einer Browserumgebung befinden, können Sie auch btoa verwenden .
btoa
ist eine Funktion, die eine Zeichenfolge als Argument verwendet und eine Base64-codierte ASCII-Zeichenfolge erzeugt. Es wird von 97% der Browser unterstützt .Beispiel:
Sie können dann
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
zurauthorization
Kopfzeile hinzufügen .Beachten Sie, dass die üblichen Einschränkungen bezüglich der HTTP-BASIC-Authentifizierung gelten. Vor allem, wenn Sie Ihren Datenverkehr nicht über https senden, kann ein Abhörgerät die Base64-codierte Zeichenfolge einfach dekodieren und so Ihr Kennwort erhalten.
Diese Antwort von security.stackexchange.com bietet einen guten Überblick über einige der Nachteile.
quelle
Benutzer und Passwort müssen nicht als Teil der URL verwendet werden
Sie können dies versuchen
quelle