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

如何在Azure DevOps流水线中通过AzContext认证Connect-MgGraph

解决Azure流水线中通过AzContext认证Connect-MgGraph的问题

问题根源

Connect-MgGraph不会自动复用AzContext的认证上下文,默认会尝试交互式认证(流水线环境不支持该方式),因此触发设备码回退提示。需要手动提取AzContext中的服务主体令牌,用来完成Graph API的认证。

解决方法

修改你的PowerShell脚本,通过以下步骤复用AzContext的认证:

  1. 从当前AzContext中获取Microsoft Graph的访问令牌
  2. 使用该令牌调用Connect-MgGraph完成认证

修改后的脚本示例

# 从AzContext获取Graph API的访问令牌(适用于较新Az模块)
$token = (Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com").Token

# 使用令牌认证Graph
Connect-MgGraph -AccessToken $token

$appDisplayName = "my-app"
$objectId = Get-MgApplication -Filter "displayName eq '$appDisplayName'" | Select-Object -ExpandProperty Id

兼容旧版Az模块的写法

如果你的Az模块版本不支持Get-AzAccessToken,可以用以下方式获取令牌:

$context = Get-AzContext
$token = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate(
    $context.Account,
    $context.Environment,
    $context.Tenant.Id.ToString(),
    $null,
    [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never,
    $null,
    "https://graph.microsoft.com"
).AccessToken

Connect-MgGraph -AccessToken $token

$appDisplayName = "my-app"
$objectId = Get-MgApplication -Filter "displayName eq '$appDisplayName'" | Select-Object -ExpandProperty Id

额外注意事项

  • 确认azureSubscription对应的服务主体已被授予应用权限类型的Application.ReadWrite.All,且已完成管理员同意(委派权限不适用于流水线中的服务主体认证场景)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:22