使用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
相关产品推荐
相关产品推荐

