如何将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分钟有效期。
安装Azure AD预览模块
令牌生命周期策略需要使用Azure AD预览版模块:Install-Module AzureADPreview -Force -AllowClobber创建30分钟有效期的令牌策略
执行命令创建针对access token的生命周期策略:New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"00:30:00"}}') ` -DisplayName "30min-MSGraph-AccessToken-Policy" ` -IsOrganizationDefault $false ` -Type "TokenLifetimePolicy"将策略关联到目标应用/服务主体
找到你用来获取令牌的应用(比如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分钟后重新获取新令牌:
- 封装令牌获取函数
编写一个函数,在获取令牌后检查其exp(过期时间)和iat(颁发时间)声明,当令牌已使用超过30分钟时强制刷新:
每次调用这个函数获取令牌时,都会自动校验已使用时长,超过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 }
关键注意事项
- 已颁发令牌无法强制提前失效:修改策略后,之前已经颁发的60分钟有效期令牌仍会持续到原过期时间,只有新颁发的令牌会使用30分钟有效期。若需紧急失效特定令牌,可通过Graph API调用
revokeSignInSessions端点吊销用户会话,或针对服务主体操作令牌吊销。 - 许可证要求:令牌生命周期策略仅适用于Azure AD Premium P1/P2租户,无许可证时只能使用应用层校验方案。
- Azure PowerShell版本:确保使用最新版Azure PowerShell模块,避免命令兼容性问题。
实践经验
- 生产环境优先采用令牌生命周期策略,能统一管控租户内应用的令牌有效期,降低长期令牌泄露带来的安全风险。
- 临时测试或无Premium权限场景,应用层校验是低成本替代方案,但需注意优化令牌缓存逻辑,避免频繁刷新令牌导致不必要的性能消耗。
- 若需针对特定用户而非应用设置有效期,可将令牌策略关联到用户对象(使用
Add-AzureADUserPolicy命令)。
内容的提问来源于stack exchange,提问作者user000682
相关产品推荐
相关产品推荐

