You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"

内容的提问来源于stack exchange,提问作者user3579222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:55:24