如何从Azure AD令牌请求的curl结果中提取access_token并赋值给变量?
提取Azure AD访问令牌并赋值给Bash变量
首先,你需要安装jq工具(大多数Linux发行版可通过包管理器安装,比如apt install jq或yum install jq),它是处理JSON输出的实用工具,能可靠解析字段值。
接下来可以把curl请求和JSON解析整合为一行命令,直接将access_token赋值给变量:
# 替换占位符为你的实际信息 TENANT_ID="<tenant-id>" CLIENT_ID="<client-id>" CLIENT_SECRET="<client-secret>" # 获取并提取access_token ACCESS_TOKEN=$(curl -s -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token \ -d "client_id=${CLIENT_ID}" \ -d 'grant_type=client_credentials' \ -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \ -d "client_secret=${CLIENT_SECRET}" | jq -r '.access_token')
关键参数说明:
-s:让curl静默执行,不输出进度信息,只返回响应内容jq -r '.access_token':-r参数表示输出原始字符串(不带JSON引号),直接得到令牌的纯文本值- 将敏感信息定义为变量,更便于维护和修改
后续使用示例:
拿到令牌后,可在后续REST请求中直接调用该变量,比如调用Databricks API:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" https://<databricks-instance>/api/2.0/clusters/list
如果环境无法安装jq,也可以用awk临时解析(但可靠性不如jq,仅适合简单场景):
ACCESS_TOKEN=$(curl -s ... | awk -F'"' '/access_token/ {print $4}')
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

