Как установить заголовок авторизации с помощью 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-аутентификация, очень многие веб-сайты не будут использовать эту концепцию, когда они предоставляют вход в систему и т. Д. Более подробно об этом см. В главе «Веб-вход в систему» ​​ниже.

Oli
источник
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/
timj98
источник
что вы используете для 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.

Devaroop
источник
При использовании 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среду.

jianpx
источник
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 
Упул Долувира
источник