Як правильно визначити базову автентифікацію HTTP за допомогою CURL правильно?


161

Я вивчаю придатність ( Apcuility docu -> REST Service Tutorial ) і намагаюся надіслати POST-запит з базовою автентифікацією через CURL:

$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status

YXBpdXNlcjphcGlwd2Q=є базовим 64 кодованим рядком з моїми обліковими даними apiuser:apipwd. Реєстраційні дані зберігаються у /data/htpasswd( apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/).

Виглядає так:

HTTP/1.1 401 Unauthorized
Server: nginx/1.4.7
Date: Mon, 22 Sep 2014 07:48:47 GMT
Content-Type: application/problem+json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.12-1~dotdeb.1
WWW-Authenticate: Basic realm="api"

Де тут помилка? Як змусити його працювати?

Відповіді:


291
curl -u username:password http://
curl -u username http://

На сторінці документації:

-u, --користувач <користувач: пароль>

Вкажіть ім’я користувача та пароль, які потрібно використовувати для автентифікації сервера. Переорієнтування -n, --netrc та --netrc-необов'язково.

Якщо ви просто вкажете ім'я користувача, curl запропонує ввести пароль.

Ім'я користувача та паролі розбиті на перший двокрапку, що унеможливлює використання двокрапки в імені користувача за допомогою цієї опції. Пароль все-таки може.

Використовуючи Kerberos V5 з сервером на базі Windows, слід включити ім'я домену Windows у ім’я користувача, щоб сервер міг успішно отримати Kerberos Ticket. Якщо цього не зробити, то початкове рукостискання аутентифікації може не вдатися.

Під час використання NTLM ім'я користувача можна вказати просто як ім’я користувача, без домену, якщо, наприклад, є один домен і ліс у вашому налаштуваннях.

Для визначення доменного імені використовуйте або нижнє імені входу в систему, або UPN (основне ім’я користувача). Наприклад, EXAMPLE \ user та user@example.com відповідно.

Якщо ви використовуєте бінарний файл curl для ввімкнення Windows SSPI і виконуєте автентифікацію Kerberos V5, Negotiate, NTLM або Digest, тоді ви можете сказати curl, щоб вибрати ім’я користувача та пароль з вашого оточення, вказавши одну двокрапку з цією опцією: "-u:" .

Якщо цей параметр використовується кілька разів, буде використаний останній.

http://curl.haxx.se/docs/manpage.html#-u

Зауважте, що вам не потрібен --basicпрапор, оскільки це за замовчуванням.


14
Якщо ваш пароль містить деякі спеціальні символи, як-от? або @ тоді вам доведеться покласти його в одиночні кліщі. curl -u 'ім'я користувача:? p @ ssword' http: //
Mirko Ebert

2
але як виглядає цей фактичний запит? Я відчуваю, що багато людей тестують завиток, але потім пишуть код ect якою б мовою вони не користувалися. чи надсилається інформація прокористувача у вигляді заголовка? Якщо так, як повинен виглядати цей заголовок
Verty00

@GautamKathrotiya у Postman є опція Basic Auth на вкладці Авторизація запиту, вона вставить це Заголовок авторизації для вас.
Кайл Каліка-Сен

1
@ Verty00 ви можете використовувати прапор -v з завитком, щоб переглянути вміст запиту.
Зак

17

як заголовок

AUTH=$(echo -ne "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64 --wrap 0)

curl \
  --header "Content-Type: application/json" \
  --header "Authorization: Basic $AUTH" \
  --request POST \
  --data  '{"key1":"value1", "key2":"value2"}' \
  https://example.com/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.