【发布时间】:2020-12-16 01:56:07
【问题描述】:
下面是我用来解析来自我的 OAuth 提供者的 json 响应的 bash 脚本。我的意图是仅从 json 响应中提取 access-token
CLIENT_ID=MASKED
CLIENT_SECRET=MASKED
RESOURCE=MASKED
TOKEN_JSON_RESPONSE=$(
curl https://corp.company.com/adfs/oauth2/token/ -H 'Accept: application/json' -H 'Content-Type: application/x-www-form-urlencoded' -d 'client_id='$CLIENT_ID'&client_secret='$CLIENT_SECRET'&grant_type=client_credentials&resource='$RESOURCE
)
echo 'The token response is ' $TOKEN_JSON_RESPONSE
echo ' @@@@@@@@@@@@@@@@@ '
ACCESS_TOKEN=$TOKEN_JSON_RESPONSE | jq '.access_token'
echo 'The access token is '$ACCESS_TOKEN
我得到了正确的 JSON 响应,下面是那个
{
"access_token":"eyJxxxxxxxx",
"token_type":"bearer",
"expires_in":3600
}
我只需要提取access_token 中的值。目前在上面的脚本中,使用 jq-parser 后我得到一个空字符串
更新:
当我直接以这种方式打印时,它可以工作echo $TOKEN_JSON_RESPONSE|jq '.access_token’
而当我把它放在一个变量中时它不起作用
ACCESS_TOKEN=$TOKEN_JSON_RESPONSE|jq '.access_token’
echo $ACCESS_TOKEN
【问题讨论】:
-
这条线
ACCESS_TOKEN=$TOKEN_JSON_RESPONSE | jq ...应该做什么? -
这一行应该在一个变量中单独捕获访问令牌,我将在对我的应用程序进行 API 调用时进一步重用这个变量.. 将附加这个不记名令牌并进行多次调用
-
它不是那样工作的。您需要在那里进行命令替换,例如
ACCESS_TOKEN=$(jq ... <<<"$TOKEN_JSON_RESPONSE")。 -
我不相信这个问题应该作为非 jq 特定问题的副本,尤其是 stackoverflow.com/questions/4775548/… 的副本而关闭。有多种方法可以向 jq 提供数据(在模式中,通过标准输入和通过一堆不同的命令行选项),有些方法比其他方法更合适。除此之外,这个问题的关键在于将输出捕获到一个变量中,这不是链接问题的主题。