Azure get-access-token有效期及有效性检查方法技术问询
检查Azure访问令牌有效性并自动刷新的方案
一、验证令牌有效性
Azure的访问令牌采用JWT格式,可通过两种方式检查有效性:
- 解析JWT过期时间:提取令牌payload中的
exp字段(秒级时间戳),与当前时间对比# 假设令牌存储在环境变量ACCESS_TOKEN中 PAYLOAD=$(echo $ACCESS_TOKEN | cut -d '.' -f 2 | tr '-+' '_/' | base64 -d 2>/dev/null) EXPIRES_AT=$(echo $PAYLOAD | jq -r '.exp') CURRENT_TIME=$(date +%s) if [ $CURRENT_TIME -lt $EXPIRES_AT ]; then echo "令牌有效" else echo "令牌已失效" fi - 调用Azure验证端点:通过官方端点直接验证令牌状态
curl -s https://login.microsoftonline.com/common/oauth2/tokenvalidation \ -d "token=$ACCESS_TOKEN" | jq -r '.error' # 返回空值则令牌有效;返回"invalid_token"则令牌失效
二、自动刷新令牌的实现
在流水线中封装一个工具函数,每次使用令牌前先检查有效性,失效则自动重新获取:
# 定义令牌管理函数 get_or_refresh_token() { # 检查现有令牌是否有效(提前1分钟刷新,避免临界时间点失效) if [ -n "$ACCESS_TOKEN" ]; then PAYLOAD=$(echo $ACCESS_TOKEN | cut -d '.' -f 2 | tr '-+' '_/' | base64 -d 2>/dev/null) EXPIRES_AT=$(echo $PAYLOAD | jq -r '.exp') CURRENT_TIME=$(date +%s) if [ $((CURRENT_TIME + 60)) -lt $EXPIRES_AT ]; then return fi fi # 重新获取令牌(指定Databricks资源ID确保权限正确) echo "刷新访问令牌..." ACCESS_TOKEN=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv) export ACCESS_TOKEN } # 流水线中每次调用Databricks前执行该函数 get_or_refresh_token # 示例:使用令牌调用Databricks API curl -H "Authorization: Bearer $ACCESS_TOKEN" https://<你的Databricks实例>/api/2.0/clusters/list
注:
--resource参数指定的2ff814a6-3304-4ab8-85cb-cd0e6f879c1d是Databricks服务的固定资源ID,确保获取的令牌具备对应访问权限。
三、流水线适配注意事项
- 确保CI/CD环境已安装
jq、base64、curl等工具(主流环境默认包含) - 跨阶段传递令牌时,需按平台规则导出环境变量:
- GitHub Actions:
echo "ACCESS_TOKEN=$ACCESS_TOKEN" >> $GITHUB_ENV - Azure DevOps:
echo "##vso[task.setvariable variable=ACCESS_TOKEN;]$ACCESS_TOKEN"
- GitHub Actions:
内容的提问来源于stack exchange,提问作者user3579222
相关产品推荐
相关产品推荐

