Я пытаюсь отправить данные POST из своего API, но не могу пройти базовую аутентификацию.
Я пытаюсь:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
Мой ответ конфигурации сервера:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Я получаю следующие заголовки:
Заголовки запроса
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
Заголовок ответа
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"
Думаю, конфигурация сервера хороша, потому что я могу получить доступ к API из расширенного клиента REST (расширение Chrome)
Какие-либо предложения?
PD: Заголовок, который я получаю от расширенного клиента REST:
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
и
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
Ответы:
Вы можете включить пользователя и пароль как часть URL:
см. этот URL, чтобы узнать больше
Учетные данные базовой аутентификации HTTP, переданные в URL-адресе и шифровании
конечно, вам понадобится пароль от имени пользователя, это не так
'Basic hashstring
.надеюсь это поможет...
источник
The use of these URLs is deprecated
Согласно https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding и http://en.wikipedia.org/wiki/Basic_access_authentication , вот как вместо этого выполнить базовую аутентификацию с заголовком ввода имени пользователя и пароля в URL-адрес. Обратите внимание, что это по-прежнему не скрывает имя пользователя или пароль от кого-либо, имеющего доступ к сети или этого JS-кода (например, пользователя, выполняющего его в браузере):
источник
NodeJS ответ:
Если вы хотите сделать это с помощью NodeJS: создайте конечную точку GET в JSON с
Authorization
заголовком и получитеPromise
ответ:Первый
( см. npm ), а затем в вашем
.js
файле:источник
Если вы находитесь в среде браузера, вы также можете использовать btoa .
btoa
- это функция, которая принимает строку в качестве аргумента и создает строку ASCII в кодировке Base64. Его поддерживают 97% браузеров .Пример:
Потом можно добавить
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
вauthorization
шапку.Обратите внимание, что применяются обычные предостережения в отношении HTTP BASIC auth, что наиболее важно, если вы не отправляете свой трафик через https, перехваченный может просто декодировать закодированную строку Base64, таким образом получая ваш пароль.
Этот ответ security.stackexchange.com дает хороший обзор некоторых недостатков.
источник
нет необходимости использовать имя пользователя и пароль как часть URL
ты можешь попробовать это
источник