Estou tentando POSTAR dados da minha API, mas não consigo passar na autenticação básica.
Eu tento:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
Minha resposta de configuração do servidor é:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Os cabeçalhos que recebo são:
Solicitar cabeçalhos
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
Cabeçalho de resposta
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"
Acho que a configuração do servidor é boa porque posso acessar a API a partir do cliente REST avançado (extensão do Chrome)
Alguma sugestão?
PD: O cabeçalho que recebo do cliente REST avançado é:
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
e
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 OPTION de envio
Respostas:
Você pode incluir o usuário e a senha como parte do URL:
veja este URL, para mais
Credenciais de autenticação básica HTTP passadas em URL e criptografia
claro, você precisará da senha do nome de usuário, não é
'Basic hashstring
.espero que isto ajude...
fonte
The use of these URLs is deprecated
Por https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding e http://en.wikipedia.org/wiki/Basic_access_authentication , aqui está como fazer autenticação básica com um cabeçalho de colocar o nome de usuário e a senha no URL. Observe que isso ainda não esconde o nome de usuário ou a senha de ninguém com acesso à rede ou este código JS (por exemplo, um usuário executando-o em um navegador):
fonte
Resposta do NodeJS:
Caso você queira fazer isso com NodeJS: faça um endpoint GET to JSON com
Authorization
cabeçalho e obtenha umPromise
retorno:Primeiro
( veja no npm ) e depois em seu
.js
arquivo:fonte
Se você estiver em um ambiente de navegador, também pode usar btoa .
btoa
é uma função que recebe uma string como argumento e produz uma string ASCII codificada em Base64. É suportado por 97% dos navegadores .Exemplo:
Você pode então adicionar
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
aoauthorization
cabeçalho.Observe que as advertências usuais sobre a autenticação HTTP BASIC se aplicam, mais importante, se você não enviar seu tráfego por https, um interceptado pode simplesmente decodificar a string codificada em Base64, obtendo assim sua senha.
Esta resposta security.stackexchange.com oferece uma boa visão geral de algumas das desvantagens.
fonte
não há necessidade de usar usuário e senha como parte do URL
você pode tentar isso
fonte