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
使用 -H
ヘッダーを再度Authorization:Basicの前に付けます。だからそれは
curl -i \
-H 'Accept:application/json' \
-H 'Authorization:Basic username:password' \
http://example.com
基本認証を設定するにはどうすればよいですか?
必要なのは、-u, --user USER[:PASSWORD]
。舞台裏でcurl
は、base64でエンコードされた資格情報を使用してAuthorization
ヘッダーを作成します。
例:
curl -u username:password -i -H 'Accept:application/json' http://example.com
1つの方法として、次のようにcurl
の一部として--user
フラグを指定します。
curl --user username:password http://example.com
もう1つの方法は、 Base64 エンコードされたトークン "username:password"を- httpsなどのオンラインWebサイトから取得することです。 ://www.base64encode.org/ を次のようにAuthorization
のcurl
ヘッダーとして渡します。
curl -i -H 'Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=' http://localhost:8080/
ここで、dXNlcm5hbWU6cGFzc3dvcmQ=
はBase64
のusername:password
エンコードされたトークンです。
次のように、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 = joeuser、password = secretpass
これを次のようにcurl
にまとめることができます:
$ curl -H "Authorization: Basic $(base64 <<<"joeuser:secretpass")" http://example.com
ほとんどの場合、これをわざわざ行うつもりなら、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
ただし、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標準の一部である基本認証として知られる機能を促進しています。
ユーザーエージェントが認証資格情報をサーバーに送信する場合、承認フィールドを使用できます。
Authorizationフィールドは次のように構成されています。
- ユーザー名とパスワードは、単一のコロン(:)で結合されます。つまり、ユーザー名自体にコロンを含めることはできません。
- 結果の文字列は、オクテットシーケンスにエンコードされます。このエンコードに使用する文字セットは、US-ASCIIと互換性がある限りデフォルトでは指定されていませんが、サーバーはcharsetパラメーターを送信してUTF-8の使用を提案する場合があります。
- 結果の文字列は、Base64のバリアントを使用してエンコードされます。
- 次に、認証方法とスペース(「Basic」など)がエンコードされた文字列の先頭に追加されます。
たとえば、ブラウザーがユーザー名としてAladdinを使用し、パスワードとしてOpenSesameを使用する場合、フィールドの値はAladdin:OpenSesame、またはQWxhZGRpbjpPcGVuU2VzYW1lのbase64エンコードです。次に、Authorizationヘッダーは次のように表示されます。
許可:基本QWxhZGRpbjpPcGVuU2VzYW1l
出典: 基本アクセス認証