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

Я изучаю Apigility (Документ Apigility → Учебное пособие по REST) и пытается отправить запрос POST с базовой аутентификацией через cURL:

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

YXBpdXNlcjphcGlwd2Q= - это базовая кодированная строка с моими учетными данными 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"

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

Ответ 1

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

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

-u, --user < user: password >

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

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

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

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

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

Чтобы указать имя домена, используйте либо имя входа в систему верхнего уровня, либо UPN (User Principal Name). Например, EXAMPLE\user и [email protected] соответственно.

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

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

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

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

Ответ 2

При использовании OAuth или других служб проверки подлинности вы часто можете также отправлять токен доступа в строку запроса вместо заголовка авторизации, поэтому что-то вроде:

GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD

Ответ 3

как заголовок

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/