Как установить заголовок авторизации с помощью curl


Ответы:


395

http://curl.haxx.se/docs/httpscripting.html

Смотрите часть 6. Аутентификация HTTP

HTTP-аутентификация

HTTP-аутентификация - это возможность сообщить серверу ваше имя пользователя и пароль, чтобы он мог проверить, разрешено ли вам выполнять запрос, который вы делаете. Базовая аутентификация, используемая в HTTP (которая по умолчанию используется в curl), основана на простом тексте , что означает, что она посылает имя пользователя и пароль только слегка запутанно, но все же полностью читаема любым, кто прослушивает сеть между вами и удаленным сервером.

Чтобы указать curl использовать имя пользователя и пароль для аутентификации:

curl --user name:password http://www.example.com

Для сайта может потребоваться другой метод аутентификации (проверьте заголовки, возвращаемые сервером), а затем --ntlm, --digest, --negotiate или даже --anyauth могут оказаться подходящими для вас вариантами.

Иногда ваш HTTP-доступ доступен только через HTTP-прокси. Это, кажется, особенно распространено в различных компаниях. Для HTTP-прокси может потребоваться собственный пользователь и пароль, чтобы клиент мог подключиться к Интернету. Чтобы указать те с curl, запустите что-то вроде:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

Если ваш прокси-сервер требует, чтобы аутентификация выполнялась с использованием метода NTLM, используйте --proxy-ntlm, если для этого требуется дайджест, используйте --proxy-digest.

Если вы используете какой-либо из этих вариантов user + password, но не указали парольную часть, curl запросит пароль в интерактивном режиме.

Обратите внимание, что при запуске программы ее параметры можно было бы увидеть при перечислении запущенных процессов системы. Таким образом, другие пользователи могут просматривать ваши пароли, если вы передадите их в виде простых параметров командной строки. Есть способы обойти это.

Стоит отметить, что, хотя именно так работает HTTP-аутентификация, очень многие веб-сайты не будут использовать эту концепцию, когда они предоставляют вход в систему и т. Д. Более подробно об этом см. В главе «Веб-вход в систему» ​​ниже.


16
@Vixed Этот вопрос явно не о PHP. [Что не так с результатами Google] (с)?
Оли

Вопрос касается авторизации, а не аутентификации, поэтому, возможно, ОП должен изменить название вопроса
пробка

321

Просто добавьте, чтобы вам не пришлось переходить по ссылкам:

curl --user name:password http://www.example.com

или если вы пытаетесь сделать аутентификацию отправки для OAuth 2:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com

15
Многие API теперь используют токены авторизации заголовка. -HВариант велик.
eliocs

14
Если вы используете -u или --user, Curl закодирует учетные данные в Base64 и -H Authorization: Basic <Base64EncodedCredentials>
создаст

Я пытаюсь добавить заголовок авторизации, HMAC-SHA256всегда получая сообщение об ошибке пропуска заголовка авторизации
Стивен Агилар

2
Кроме того, если вам нужно , <Base64EncodedCredentials>как упомянуто @ тимофеевка-kansaki, вы можете получить кодированное удостоверение с помощью команды: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. Для справки см. Stackoverflow.com/questions/16918602/…
David

170

Жетоны на предъявителя выглядят так:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com

7
И если вы хотите выполнить «базовую» авторизацию, просто поменяйте «предъявитель» на «базовую»
даррен

У меня самое странное, я получаю «Неправильный формат заголовка авторизации» и «HTTP-200». Значит сервер принимает мою авторизацию, но формат неверный?
Groostav

65

(для тех, кто ищет ответ php-curl )

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

64

Это сработало для меня:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/

что вы используете для JWT?
Ciasto piekarz

1
Ты имеешь в виду Authorization: bearer xxxxxxxxx?
JLH

@ jlh ты имеешь в видуBearer
Даниэль В.

Я был почти уверен, что он не учитывает регистр, но, похоже, я не прав. Да я имел ввиду Bearer.
JLH

20

Для HTTP Basic Auth:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

заменить _your_token_и URL.


При использовании oauth, откуда берется токен авторизации? Я пытаюсь использовать curl для загрузки файлов с сайта, где я использую имя пользователя и пароль, но, похоже, происходит сбой из-за использования oauth2.
Ctrl-Alt-Delete

@toasteez вам нужно пройти через поток Oauth2, чтобы получить токен. Обычно это двухэтапный процесс, который должен быть подробно описан в документации сервера.
Devaroop

13
хороший ответ маленький помощник echo -ne "<your-user>:<your-pass>" | base64 --wrap 0сгенерирует базовый токен авторизации.
Майк Д

3
@MikeD -H "Authorization: Basic <_your_token_>"делает то же самое, что и --user login:password. Вы можете проверить это сcurl -v
vladkras

1
@vladkras мой ответ является помощником для этого ответа. По моему опыту, лучше понять, как создать токен, а не полагаться на curl для его генерации.
Майк Д

14

Будьте осторожны, когда вы используете: curl -H "Authorization: token_str" http://www.example.com

token_strи Authorizationдолжен быть отделен пробелом, иначе серверная часть не получит HTTP_AUTHORIZATIONсреду.


2
Неверно, если требуется пробел, ваш HTTP-сервер не работает. Также вам нужны две строки типа, а затем токен.
Алексис Вилке

5

Если у вас нет токена на момент совершения вызова, вам нужно будет сделать два вызова, один для получения токена, а другой - для извлечения токена из ответа, обратите внимание на

grep токен | cut -d, -f1 | cut -d \ "-f4

так как это часть, которая имеет дело с извлечением токена из ответа.

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

После извлечения токена вы можете использовать токен для выполнения последующих вызовов следующим образом.

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.