curl set动态标头标记抛出无效键

agxfikkp  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(218)

我正试图用头中的token命中一个rest API。

apikeyName="$(date '+%s')"
key=$(curl -k -X POST -H "Content-Type: application/json" \
                    -d '{"name":"'$apikeyName'", "role": "Admin"}' \
                    http://admin:admin@localhost:3000/api/auth/keys | jq '.key')

echo $key
# # Alerting API
curl -k -X GET 'http://localhost:3000/api/alert-notifications' -H 'Authorization: Bearer '$key'';

终端输出

"eyJrIjoiaWJPaDFFZXZMeW1RYU90NUR4d014T3hYUmR6NDVUckoiLCJuIjoiMTY3NTM1OTc4OCIsImlkIjoxfQ=="
{"message":"invalid API key","traceID":""}

第一个1是密钥打印,最后一个来自API响应。我试着硬编码的关键和它的工作。

zpgglvta

zpgglvta1#

简短回答:使用jq -r '.key'从json响应中提取密钥,而不添加引号。
长回答:命令行上的引号和变量中嵌入的引号是有区别的。考虑:

key='"abcd"'
printf '%s\n' $key "abcd"
# prints:
# "abcd"
# abcd

命令行上的引号是bash语法。Bash会记录下被引用的内容,然后在完成时从命令行中删除引号,因此printf只在上面的第二种情况下打印abcd
变量中的引号是普通的旧数据。Bash不对它们做任何事情,所以它们像任何其他数据一样传递给命令,printf在第一种情况下打印"abcd"
在您的curl案例中,接收方并不期望密钥在数据中嵌入引号。因此,curl -blah "keydata"工作正常,因为bash去掉了引号,但curl -blah $key失败了,因为bash没有删除嵌入的引号。
标签:BashParser

相关问题