Как правильно определить базовую HTTP-аутентификацию с использованием cURL?

162

Я изучаю Apigility ( Apigility document -> 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"

Где здесь ошибка? Как заставить это работать?

automatix
источник

Ответы:

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

Со страницы документации:

-u, --user <пользователь: пароль>

Укажите имя пользователя и пароль, которые будут использоваться для аутентификации сервера. Переопределяет -n, --netrc и --netrc-необязательно.

Если вы просто укажете имя пользователя, curl запросит пароль.

Имя пользователя и пароли разделены на первое двоеточие, что делает невозможным использование двоеточия в имени пользователя с этой опцией. Может пароль, еще.

При использовании Kerberos V5 с сервером под управлением Windows вы должны включить имя домена Windows в имя пользователя, чтобы сервер успешно получил билет Kerberos. Если вы этого не сделаете, первоначальное рукопожатие аутентификации может не получиться

При использовании NTLM имя пользователя может быть указано просто как имя пользователя без домена, если, например, в вашей настройке есть один домен и лес.

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

Если вы используете двоичный файл curl с включенным SSPI в Windows и выполняете аутентификацию Kerberos V5, Negotiate, NTLM или Digest, вы можете указать curl выбрать имя пользователя и пароль в вашей среде, указав одно двоеточие с этой опцией: "-u:" ,

Если эта опция используется несколько раз, будет использована последняя.

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

Обратите внимание, что вам не нужен --basicфлаг, так как он используется по умолчанию.

Gajus
источник
14
Если ваш пароль содержит некоторые специальные символы, такие как? или @ тогда вы должны поставить его в один тик. curl -u 'имя пользователя:? p @ ssword' http: //
Мирко Эберт,
2
но как выглядит этот фактический запрос? Я чувствую, что многие люди тестируют с помощью curl, но потом пишут код на любом языке, который они используют. информация --user отправляется как заголовок? Если так, то как должен выглядеть этот заголовок
Verty00
@GautamKathrotiya в Почтальоне есть опция Basic Auth на вкладке Authorization запроса, он вставит этот заголовок авторизации для вас.
Кайл Калика-
1
@ Verty00 вы можете использовать флаг -v с curl, чтобы увидеть содержимое запроса.
Зак
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/
srghma
источник