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を使用し、ダイジェストが必要な場合は--proxy-digestを使用します。

これらのユーザー+パスワードオプションのいずれかを使用し、パスワードの部分を省略すると、curlはインタラクティブにパスワードの入力を求めます。

プログラムを実行すると、システムの実行中のプロセスをリストするときに、そのパラメーターが表示される可能性があることに注意してください。したがって、プレーンなコマンドラインオプションとして渡すと、他のユーザーがパスワードを監視できる可能性があります。これを回避する方法があります。

これはHTTP認証の仕組みですが、ログインなどを提供するときにこの概念を使用しないWebサイトが非常に多いことに注意してください。詳細については、以下のWebログインの章を参照してください。


16
@Vixedこの質問は、PHPに関するものではありません。[Googleの結果の何が問題になっていますか](s)?
Oli

質問は認証ではなく承認に関するものなので、おそらくOPが質問のタイトルを変更する必要があります
jam

320

クリックスルーする必要がないように追加するだけです。

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を使用している場合は、カールは、Base64に資格情報をエンコードし、このようなヘッダを生成します:-H Authorization: Basic <Base64EncodedCredentials>
ティモシーKanski

HMAC-SHA256常に認証ヘッダーが見つからないというエラーが発生する状態で認証ヘッダーを追加しようとしています
Steven Aguilar

2
さらに、<Base64EncodedCredentials>@ timothy-kansakiが述べたようにが必要な場合は、次のコマンドを使用して、エンコードされた認証情報を取得できますcred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com。参考として、stackoverflow.com
questions / 16918602 /…を

170

ベアラートークンは次のようになります。

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

7
そして、あなたは「基本」認証「基本」の、ちょうどスワップ「ベアラ」を行うために探している場合
ダレン・

一番奇妙なことに、「Authorizationヘッダーの形式が間違っています」と「HTTP-200」が表示されます。サーバーは私の承認を受け入れますが、形式が間違っていますか?
グロスタフ

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 2018

1
どういう意味Authorization: bearer xxxxxxxxxですか?
jlh

あなたが意味@jlhBearer
ダニエル・W.

大文字と小文字を区別しないことはほぼ確実でしたが、私は間違っているようです。はい、私は意味しましたBearer
jlh

20

HTTP基本認証の場合:

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

_your_token_URLを置き換えます。


oauthを使用する場合、承認トークンはどこから取得されますか?ユーザーとパスワードを使用しているサイトからcurlを使用してファイルをダウンロードしようとしていますが、使用中のoauth2が原因で失敗しているようです。
ctrl-alt-delete

@toasteezトークンを受け取るには、Oauth2フローを実行する必要があります。通常、これは2ステップのプロセスであり、サーバーのドキュメントで詳しく説明されています。
Devaroop

13
いい答えです。小さなヘルパーecho -ne "<your-user>:<your-pass>" | base64 --wrap 0が基本的な認証トークンを生成します。
Mike D

3
@MikeDはと-H "Authorization: Basic <_your_token_>"同じ効果があり--user login:passwordます。あなたはそれをチェックすることができますcurl -v
vladkras

1
@vladkras私の回答はこの回答のヘルパーです。私の経験では、curlを使用してトークンを生成するのではなく、トークンを作成する方法を理解することをお勧めします。
Mike D

14

以下を使用する場合は注意してください。 curl -H "Authorization: token_str" http://www.example.com

token_strAuthorizationそうでない場合は、サーバー側が得ることはありません、ホワイトスペースで区切られている必要がありHTTP_AUTHORIZATION、環境を。


2
真実ではありません。空白が必要な場合、HTTPサーバーが壊れています。また、型とトークンの2つの文字列が必要です。
Alexis Wilke 2017

5

呼び出しの時点でトークンがない場合は、2つの呼び出しを行う必要があります。1つはトークンを取得するため、もう1つは応答からトークンを抽出するためです。

grepトークン| カット-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 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.