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

如何将Get-AzAccessToken获取的MSGraph令牌过期时间从1小时改为30分钟

如何缩短Get-AzAccessToken获取的MS Graph令牌有效期至30分钟

Get-AzAccessToken本身无法直接指定令牌有效期,因为令牌的有效期由Azure Active Directory(Azure AD)的颁发策略决定。要将MS Graph令牌的默认60分钟有效期缩短至30分钟,可通过以下两种方式实现:

方法一:配置Azure AD令牌生命周期策略(推荐,需Azure AD Premium P1/P2)

这种方式从身份源层面控制令牌有效期,所有关联该策略的应用/用户获取的MS Graph令牌都会自动生效30分钟有效期。

  1. 安装Azure AD预览模块
    令牌生命周期策略需要使用Azure AD预览版模块:

    Install-Module AzureADPreview -Force -AllowClobber
    
  2. 创建30分钟有效期的令牌策略
    执行命令创建针对access token的生命周期策略:

    New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"00:30:00"}}') `
      -DisplayName "30min-MSGraph-AccessToken-Policy" `
      -IsOrganizationDefault $false `
      -Type "TokenLifetimePolicy"
    
  3. 将策略关联到目标应用/服务主体
    找到你用来获取令牌的应用(比如Azure PowerShell使用的服务主体,或自定义注册的应用),并绑定策略:

    # 获取刚才创建的策略
    $policy = Get-AzureADPolicy -Filter "DisplayName eq '30min-MSGraph-AccessToken-Policy'"
    # 获取目标服务主体(替换为你的应用名称)
    $sp = Get-AzureADServicePrincipal -Filter "DisplayName eq 'Microsoft Azure PowerShell'"
    # 绑定策略
    Add-AzureADServicePrincipalPolicy -Id $sp.ObjectId -RefObjectId $policy.Id
    

方法二:应用层自定义校验(无Premium许可证时可用)

如果没有Azure AD Premium权限,可以在你的脚本/应用中自行校验令牌的过期时间,强制在30分钟后重新获取新令牌:

  1. 封装令牌获取函数
    编写一个函数,在获取令牌后检查其exp(过期时间)和iat(颁发时间)声明,当令牌已使用超过30分钟时强制刷新:
    function Get-ShortLivedGraphToken {
        $token = Get-AzAccessToken -ResourceTypeName MSGraph
        # 解析令牌的颁发时间,转换为本地时间
        $issuedOn = [DateTimeOffset]::FromUnixTimeSeconds($token.IssuedOn)
        $elapsedTime = [DateTimeOffset]::Now - $issuedOn
        # 若令牌已使用超过30分钟,强制刷新
        if ($elapsedTime.TotalMinutes -ge 30) {
            $token = Get-AzAccessToken -ResourceTypeName MSGraph -ForceRefresh
        }
        return $token
    }
    
    每次调用这个函数获取令牌时,都会自动校验已使用时长,超过30分钟就触发刷新。

关键注意事项

  • 已颁发令牌无法强制提前失效:修改策略后,之前已经颁发的60分钟有效期令牌仍会持续到原过期时间,只有新颁发的令牌会使用30分钟有效期。若需紧急失效特定令牌,可通过Graph API调用revokeSignInSessions端点吊销用户会话,或针对服务主体操作令牌吊销。
  • 许可证要求:令牌生命周期策略仅适用于Azure AD Premium P1/P2租户,无许可证时只能使用应用层校验方案。
  • Azure PowerShell版本:确保使用最新版Azure PowerShell模块,避免命令兼容性问题。

实践经验

  • 生产环境优先采用令牌生命周期策略,能统一管控租户内应用的令牌有效期,降低长期令牌泄露带来的安全风险。
  • 临时测试或无Premium权限场景,应用层校验是低成本替代方案,但需注意优化令牌缓存逻辑,避免频繁刷新令牌导致不必要的性能消耗。
  • 若需针对特定用户而非应用设置有效期,可将令牌策略关联到用户对象(使用Add-AzureADUserPolicy命令)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:50:33