J'essaie de POST des données de mon API mais je ne peux pas passer l'authentification de base.
J'essaie:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
La réponse de ma configuration de serveur est:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Les en-têtes que j'obtiens sont:
Demander des en-têtes
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
En-tête de réponse
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"
Je suppose que la configuration du serveur est bonne car je peux accéder à l'API à partir du client REST avancé (extension Chrome)
Aucune suggestion?
PD: L'en-tête que j'obtiens du client REST avancé est:
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
et
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
envoi méthode OPTION
Réponses:
Vous pouvez inclure l'utilisateur et le mot de passe dans l'URL:
voir cette URL, pour en savoir plus
Informations d'identification d'authentification de base HTTP transmises dans l'URL et le chiffrement
bien sûr, vous aurez besoin du mot de passe du nom d'utilisateur, ce n'est pas le cas
'Basic hashstring
.J'espère que cela t'aides...
la source
The use of these URLs is deprecated
Par https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding et http://en.wikipedia.org/wiki/Basic_access_authentication , voici comment faire l'authentification de base avec un en-tête à la place de mettre le nom d'utilisateur et le mot de passe dans l'URL. Notez que cela ne masque toujours pas le nom d'utilisateur ou le mot de passe de toute personne ayant accès au réseau ou à ce code JS (par exemple, un utilisateur qui l'exécute dans un navigateur):
la source
Réponse de NodeJS:
Au cas où vous voudriez le faire avec NodeJS: créez un point de terminaison GET to JSON avec en-
Authorization
tête et récupérez unPromise
retour:Première
( voir sur npm ) puis dans votre
.js
dossier:la source
Si vous êtes dans un environnement de navigateur, vous pouvez également utiliser btoa .
btoa
est une fonction qui prend une chaîne comme argument et produit une chaîne ASCII encodée en Base64. Son supporté par 97% des navigateurs .Exemple:
Vous pouvez ensuite ajouter
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
à l'en-authorization
tête.Notez que les mises en garde habituelles concernant l'authentification HTTP BASIC s'appliquent, surtout si vous n'envoyez pas votre trafic via https, une écoute clandestine peut simplement décoder la chaîne encodée en Base64 et obtenir ainsi votre mot de passe.
Cette réponse security.stackexchange.com donne un bon aperçu de certains des inconvénients.
la source
pas besoin d'utiliser l'utilisateur et le mot de passe dans le cadre de l'URL
tu peux essayer ça
la source