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

使用PowerShell Connect-AzureAD交互式登录凭据获取Graph访问令牌

解答
  • 你无法直接使用Connect-AzureAD交互式登录后获取的默认访问令牌调用Microsoft Graph API:Connect-AzureAD默认申请的是Azure AD Graph(资源URI为https://graph.windows.net)的访问凭证,而Microsoft Graph的资源URI为https://graph.microsoft.com,二者属于不同资源,令牌无法通用。
  • 不需要强制用户重新登录,也无需直接调用AuthenticationContext.AcquireTokenAsync方法:你可以直接从当前Connect-AzureAD的会话缓存中提取刷新令牌,用刷新令牌兑换Microsoft Graph的访问凭证,全程不会触发二次登录验证。

你可以参考以下PowerShell脚本实现该逻辑,无需额外注册Azure AD应用:

# 第一步:完成Azure AD交互式登录,仅需执行一次
Connect-AzureAD

# 提取当前会话的缓存信息
$sessionInfo = Get-AzureADCurrentSessionInfo
$tenantId = $sessionInfo.TenantId.ToString()
# 调用Azure AD PowerShell模块的公开官方客户端ID,无需自行注册应用
$publicClientId = "1b730954-1685-4b74-9bfd-dac224a7b894"
# 从会话缓存中获取刷新令牌
$refreshToken = [Microsoft.Open.Azure.AD.CommonLibrary.AzureSession]::AccessTokens[$tenantId].RefreshToken

# 用刷新令牌兑换Microsoft Graph访问令牌
$tokenRequestParams = @{
    Uri = "https://login.microsoftonline.com/$tenantId/oauth2/token"
    Method = "POST"
    Body = @{
        client_id = $publicClientId
        grant_type = "refresh_token"
        refresh_token = $refreshToken
        resource = "https://graph.microsoft.com"
        scope = "openid"
    }
}
$graphToken = Invoke-RestMethod @tokenRequestParams
$graphAuthHeader = @{Authorization = "Bearer $($graphToken.access_token)"}

# 调用Graph API示例:获取当前登录用户信息
Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/me" -Headers $graphAuthHeader
  • 只要Connect-AzureAD的会话未过期,刷新令牌就处于有效状态,无需用户再次输入登录凭证。
  • 脚本中使用的客户端ID为微软官方公开的Azure AD PowerShell模块公共客户端ID,不需要你自行创建或注册任何应用,完全匹配你的使用限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:04