我正试图用头中的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响应。我试着硬编码的关键和它的工作。
1条答案
按热度按时间zpgglvta1#
简短回答:使用
jq -r '.key'
从json响应中提取密钥,而不添加引号。长回答:命令行上的引号和变量中嵌入的引号是有区别的。考虑:
命令行上的引号是bash语法。Bash会记录下被引用的内容,然后在完成时从命令行中删除引号,因此
printf
只在上面的第二种情况下打印abcd
。变量中的引号是普通的旧数据。Bash不对它们做任何事情,所以它们像任何其他数据一样传递给命令,
printf
在第一种情况下打印"abcd"
。在您的
curl
案例中,接收方并不期望密钥在数据中嵌入引号。因此,curl -blah "keydata"
工作正常,因为bash去掉了引号,但curl -blah $key
失败了,因为bash没有删除嵌入的引号。标签:BashParser