Як встановити заголовок авторизації за допомогою curl


397

Як мені пройти заголовок авторизації за допомогою cURL? (виконується в /usr/bin/curl).

Відповіді:


394

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, якщо він вимагає використання Digest --proxy-digest.

Якщо ви використовуєте будь-який із цих параметрів користувача + пароль, але не залишаєте частину пароля, curl підкаже про інтерактивний пароль.

Зауважте, що при запуску програми, її параметри можуть бути доступні при перерахуванні запущених процесів системи. Таким чином, інші користувачі можуть переглядати ваші паролі, якщо ви передасте їх як прості параметри командного рядка. Є способи цього обійти.

Варто зазначити, що хоча так працює HTTP-аутентифікація, дуже багато веб-сайтів не використовуватимуть цю концепцію, коли вони здійснюють вхід тощо. Детальнішу інформацію щодо цього див. У розділі Веб-вхід далі.


16
@Vixed Це питання явно не стосується PHP. [Що не так з результатами Google]?
Олі

Питання про те, щоб Авторизація не була автентифікацією, тому, можливо, ОП повинна змінити назву питання
заклик

320

Просто додайте, щоб вам не довелося переходити через клік:

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

або якщо ви намагаєтесь надіслати автентифікацію для OAuth 2:

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

15
Зараз багато API використовують маркери авторизації заголовків. -HВаріант великий.
еліоки

14
Якщо ви використовуєте -u або --user, Curl кодує облікові дані в Base64 і -H Authorization: Basic <Base64EncodedCredentials>
видасть

Я намагаюся додати заголовок авторизації, HMAC-SHA256завжди отримуючи помилку відсутнього заголовка авторизації
Steven Aguilar

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

170

Токени на носіях виглядають так:

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

7
І якщо ви хочете зробити "Basic" авторизацію, просто поміняйте "Bearer" на "Basic"
Даррен

У мене найдивніше, я отримую "Неправильний формат заголовка авторизації" та "HTTP-200". Отже сервер приймає мою авторизацію, але формат неправильний?
Groostav

64

(для тих, хто шукає відповідь на 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
Daniel W.

Я був майже впевнений, що це нечутливе до регістру, але, здається, я помиляюся. Так, я мав на увазі Bearer.
jlh

20

Для базового Auth HTTP:

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генерує основний маркер автентичності.
Майк D

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-сервер зламаний. Також потрібні два рядки типу, а потім маркер.
Alexis Wilke

5

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

греп-жетон | вирізати -d, -f1 | вирізати -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.