
次のファイルがありますbasic.json
。
{
"user": "user",
"pass": "password"
}
次のようにBase64でエンコードしようとしています。
"Basic dXNlcjpwYXNzd29yZA=="
私はかなり近いと思います:
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64)
しかし、結果は間違っていました。
Basic InVzZXIiOiJwYXNzd29yZCIK
-e
記事に記載されているフラグを試してみました。
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64 -e)
ただし、次のエラーが発生します。
base64:無効なオプション - 'e'
私はどこで間違っていますか?
よろしくお願いします。
私のソリューション
コマンドは次のように終了します。
RUN echo "map \"\" \$basicAuth {\n\
\tdefault $(jq '"Basic " + ("\(.user):\(.pass)" | @base64)' basic.json);\n\
}" > basic.conf
私のbasic.conf
ファイルはついに正しい基本認証を持っています。
map "" $basicAuth {
default "Basic dXNlcjpwYXNzd29yZA==";
}
みんなありがとう
答え1
jq
を含むさまざまな出力フォーマットフィルタが用意されています@base64
。
たとえば、JSONオブジェクト全体をfileにエンコードするには、basic.json
次のように使用できます。
$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9
この"Basic \(.)"
フィルタは、目的の形式を取得するために文字列補間のみを使用します。
これらのフィルタをより一般的に使用すると、特定の値をエンコードできます。
$ jq '.pass |= @base64' basic.json
{
"user": "user",
"pass": "cGFzc3dvcmQ="
}
答え2
jq
AND演算子を使用してください@base64
。
<basic.json jq '"Basic " + ("\(.user):\(.pass)"|@base64)'
"Basic dXNlcjpwYXNzd29yZA=="
user
そしてその値は演算子にpass
文字列として与えられます。base64
今残っているのは、単純な文字列接続だけです。