Estoy intentando POSTAR datos desde mi API pero no puedo pasar la autenticación básica.
Lo intento:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
La respuesta de configuración de mi servidor es:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Los encabezados que obtengo son:
Solicitar encabezados
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
Encabezado de respuesta
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"
Supongo que la configuración del servidor es buena porque puedo acceder a la API desde el cliente REST avanzado (extensión de Chrome)
¿Alguna sugerencia?
PD: El encabezado que obtengo del cliente REST avanzado es:
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
y
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
método de envío de OPCIÓN
Respuestas:
Puede incluir el usuario y la contraseña como parte de la URL:
ver esta URL, para más
Credenciales de autenticación básica HTTP pasadas en URL y cifrado
por supuesto, necesitará la contraseña del nombre de usuario, no lo es
'Basic hashstring
.espero que esto ayude...
fuente
The use of these URLs is deprecated
Según https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding y http://en.wikipedia.org/wiki/Basic_access_authentication , aquí se explica cómo realizar la autenticación básica con un encabezado en su lugar de poner el nombre de usuario y la contraseña en la URL. Tenga en cuenta que esto todavía no oculta el nombre de usuario o la contraseña de cualquier persona con acceso a la red o este código JS (por ejemplo, un usuario que lo ejecuta en un navegador):
fuente
Respuesta de NodeJS:
En caso de que quisiera hacerlo con NodeJS: cree un punto final GET a JSON con
Authorization
encabezado y obtenga unPromise
devolución:primero
( ver en npm ) y luego en su
.js
archivo:fuente
Si está en un entorno de navegador, también puede usar btoa .
btoa
es una función que toma una cadena como argumento y produce una cadena ASCII codificada en Base64. Es compatible con el 97% de los navegadores. .Ejemplo:
Luego puede agregar
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
alauthorization
encabezado.Tenga en cuenta que se aplican las advertencias habituales sobre la autenticación HTTP BASIC, y lo más importante es que si no envía su tráfico a través de https, un escuchado puede simplemente decodificar la cadena codificada en Base64 y obtener así su contraseña.
Esta respuesta security.stackexchange.com ofrece una buena descripción general de algunas de las desventajas.
fuente
no es necesario utilizar el usuario y la contraseña como parte de la URL
puedes probar esto
fuente