curl设置动态Header Token时提示无效API密钥问题
问题分析
你的问题出在jq '.key'的输出包含双引号,导致变量$key的值是带引号的字符串(比如"eyJrIjoi..."),而API需要的是不带引号的纯Token值。硬编码时你手动去掉了引号所以能正常调用,脚本里直接用带引号的$key就会触发「invalid API key」错误。
解决方案
有两种简单的修复方式:
方式1:让jq输出无引号的原始字符串
修改获取key的命令,给jq加上-r(raw output)参数,直接输出不带双引号的Token:
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 -r '.key') echo $key # Alerting API curl -k -X GET 'http://localhost:3000/api/alert-notifications' -H 'Authorization: Bearer '$key'';
方式2:手动过滤变量中的双引号
如果不想修改jq命令,可以在赋值时用tr命令去掉引号:
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' | tr -d '"')
验证效果
修改后执行脚本,echo $key输出的会是不带双引号的纯Token字符串,此时调用API就能正常通过认证。
内容的提问来源于stack exchange,提问作者boycod3
相关产品推荐
相关产品推荐

