0

我正在使用 Azure Log Analytics 获取一些信息,但首先我需要从 1 个命令中获取 OAuth 令牌并将其传递给下一个命令。我有以下 Curl 命令,我自己测试过它们(复制粘贴输出以供下一个输入),但是我想将 OAuth 令牌输出作为自动化任务的变量传递,但由于某种原因它不能将变量读入下一个命令。

token=$(curl -X POST \
  https://login.microsoftonline.com/{{subscriptionID}}/oauth2/token \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=client_credentials&client_id={{clientID}}&client_secret={{clientSECRET}}&resource=https%3A%2F%2Fapi.loganalytics.io' \
  | jq .access_token)


curl -X POST \
  https://api.loganalytics.io/v1/workspaces/{{workspaceID}}/query \
  -H 'Authorization: Bearer $token' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{ "query": "AzureActivity | summarize count() by Category" }'

不幸的是,当我运行此命令时,它会回复需要令牌。

{"error":{"message":"Valid authentication was not provided","code":"AuthorizationRequiredError"}}

但是,如果我要回显该$token变量,则表明它已保存

beefcake@ubuntu:~$ echo $token
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1...."

正如我所说,如果我删除token=$(..)并将输出复制/粘贴到下一个输入中,这些命令就可以正常工作。任何想法为什么这不适用于自动化?

4

1 回答 1

1

@Aserre 有正确的心态。结果是 jq" "从字符串中复制了引号,而不记名令牌不需要。因此我的第一个命令应该是这样的:

token=$(curl -X POST \
  https://login.microsoftonline.com/{{subscriptionID}}/oauth2/token \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=client_credentials&client_id={{clientID}}&client_secret={{clientSECRET}}&resource=https%3A%2F%2Fapi.loganalytics.io' \
  | jq -r .access_token)

注意最后一行有-r删除双引号的命令。这显示了以下回声:

beefcake@ubuntu:~$ echo $token
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs....

注意" "从回声中删除。除此之外,我必须更改我替换为的下一个'Authorization: Bearer $token'命令"Authorization: Bearer $token"

curl -X POST \
  https://api.loganalytics.io/v1/workspaces/{{workspaceID}}/query \
  -H "Authorization: Bearer $token" \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{ "query": "AzureActivity | summarize count() by Category" }'
于 2018-08-13T14:39:10.670 回答