如何在Azure DevOps流水线中通过AzContext认证Connect-MgGraph
解决Azure流水线中通过AzContext认证Connect-MgGraph的问题
问题根源
Connect-MgGraph不会自动复用AzContext的认证上下文,默认会尝试交互式认证(流水线环境不支持该方式),因此触发设备码回退提示。需要手动提取AzContext中的服务主体令牌,用来完成Graph API的认证。
解决方法
修改你的PowerShell脚本,通过以下步骤复用AzContext的认证:
- 从当前AzContext中获取Microsoft Graph的访问令牌
- 使用该令牌调用
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
相关产品推荐
相关产品推荐

