web-dev-qa-db-ja.com

curlの基本認証コマンド

64エンコードされた資格情報を使用して基本認証を設定するにはどうすればよいですか?私は2つのコマンドの下で試しましたが、役に立たないので、提案してください。

curl -i -H 'Accept:application/json' Authorization:Basic <username:password> http://example.com
curl -i -H 'Accept:application/json' Authorization:Basic.base64_encode(username:password) http://example.com  
33
Amit Sharad

使用 -Hヘッダーを再度Authorization:Basicの前に付けます。だからそれは

curl -i \
    -H 'Accept:application/json' \
    -H 'Authorization:Basic username:password' \
    http://example.com
27
Sabuj Hassan

基本認証を設定するにはどうすればよいですか?

必要なのは、-u, --user USER[:PASSWORD]。舞台裏でcurlは、base64でエンコードされた資格情報を使用してAuthorizationヘッダーを作成します。

例:

curl -u username:password -i -H 'Accept:application/json' http://example.com
43
deltheil

1つの方法として、次のようにcurlの一部として--userフラグを指定します。

curl --user username:password http://example.com

もう1つの方法は、 Base64 エンコードされたトークン "username:password"を- httpsなどのオンラインWebサイトから取得することです。 ://www.base64encode.org/ を次のようにAuthorizationcurlヘッダーとして渡します。

curl -i -H 'Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=' http://localhost:8080/

ここで、dXNlcm5hbWU6cGFzc3dvcmQ=Base64username:passwordエンコードされたトークンです。

12
Arpit

バックグラウンド

次のように、base64 CLIツールを使用して、ユーザー名+パスワードのbase64エンコードバージョンを生成できます。

$ echo -n "joeuser:secretpass" | base64
am9ldXNlcjpzZWNyZXRwYXNz

-or-

$ base64 <<<"joeuser:secretpass"
am9ldXNlcjpzZWNyZXRwYXNzCg==

Base64はリバーシブルなので、次のように復号化して確認することもできます。

$ echo -n "joeuser:secretpass" | base64 | base64 -D
joeuser:secretpass

-or-

$ base64 <<<"joeuser:secretpass" | base64 -D
joeuser:secretpass

注:username = joeuserpassword = secretpass

例#1--Hを使用する

これを次のようにcurlにまとめることができます:

$ curl -H "Authorization: Basic $(base64 <<<"joeuser:secretpass")" http://example.com

例#2--uの使用

ほとんどの場合、これをわざわざ行うつもりなら、curl-uオプションを使用するだけでもよいことに同意するでしょう。

$ curl --help |grep -- "--user "
 -u, --user USER[:PASSWORD]  Server user and password

例えば:

$ curl -u someuser:secretpass http://example.com

ただし、 LastPass または Pass などの暗号化されたボールトサービスに資格情報を保持する場合は、これを準安全な方法で行うことができます。

たとえば、ここでは、LastPassのCLIツールlpassを使用して、資格情報を取得しています。

$ curl -u $(lpass show --username example.com):$(lpass show --password example.com) \
     http://example.com

例3-curl configを使用する

ただし、curlに資格情報を渡すより安全な方法があります。このメソッドは、-Kスイッチを使用します。

$ curl -X GET -K \
    <(cat <<<"user = \"$(lpass show --username example.com):$(lpass show --password example.com)\"") \
    http://example.com

使用すると、詳細は一時ファイル記述子を介してcurlに渡されるため、非表示のままになります。たとえば、

+ curl -skK /dev/fd/63 -XGET -H 'Content-Type: application/json' https://es-data-01a.example.com:9200/_cat/health
++ cat
+++ lpass show --username example.com
+++ lpass show --password example.com
1561075296 00:01:36 rdu-es-01 green 9 6 2171 1085 0 0 0 0 - 100.0%       

注:上記のElasticsearchノードの1つと通信し、クラスターの状態について問い合わせています。

このメソッドは、user = "<username>:<password>"の内容を持つファイルを動的に作成し、curlに渡します。

HTTP基本認証

上記のメソッドは、HTTP標準の一部である基本認証として知られる機能を促進しています。

ユーザーエージェントが認証資格情報をサーバーに送信する場合、承認フィールドを使用できます。

Authorizationフィールドは次のように構成されています。

  1. ユーザー名とパスワードは、単一のコロン(:)で結合されます。つまり、ユーザー名自体にコロンを含めることはできません。
  2. 結果の文字列は、オクテットシーケンスにエンコードされます。このエンコードに使用する文字セットは、US-ASCIIと互換性がある限りデフォルトでは指定されていませんが、サーバーはcharsetパラメーターを送信してUTF-8の使用を提案する場合があります。
  3. 結果の文字列は、Base64のバリアントを使用してエンコードされます。
  4. 次に、認証方法とスペース(「Basic」など)がエンコードされた文字列の先頭に追加されます。

たとえば、ブラウザーがユーザー名としてAladdinを使用し、パスワードとしてOpenSesameを使用する場合、フィールドの値はAladdin:OpenSesame、またはQWxhZGRpbjpPcGVuU2VzYW1lのbase64エンコードです。次に、Authorizationヘッダーは次のように表示されます。

許可:基本QWxhZGRpbjpPcGVuU2VzYW1l

出典: 基本アクセス認証

3
slm