如何在C#中复现PowerShell az login效果,无需tenantId/clientId获取Azure订阅请求token
解决方案
你当前使用的是客户端凭证流的服务主体认证逻辑,和az login的用户交互式网页登录属于完全不同的认证模式,所以生成的token内容必然存在差异。要实现和网页登录完全一致的逻辑,不需要提前传入tenantId、clientId,建议使用官方最新的Azure.Identity认证库替换已废弃的ADAL库,具体调整步骤如下:
1. 安装依赖
首先安装官方推荐的NuGet包:Install-Package Azure.Identity
2. 替换认证逻辑
使用InteractiveBrowserCredential即可实现和az login完全一致的弹出网页登录逻辑,无需自行维护clientId、tenantId:
using Azure.Identity; using Azure.Core; // 初始化交互式浏览器凭证,默认配置无需传入tenantId、clientId var credential = new InteractiveBrowserCredential(); // 配置Azure资源管理接口的请求scope var tokenRequestContext = new TokenRequestContext(new[] { "https://management.azure.com/.default" }); // 自动弹出网页完成登录,获取access token var accessToken = await credential.GetTokenAsync(tokenRequestContext, CancellationToken.None); var targetToken = accessToken.Token;
可选:设备码登录适配
如果不需要弹出浏览器,想要实现和az login --use-device-code一致的设备码登录逻辑,替换凭证初始化代码即可:
var credential = new DeviceCodeCredential();
生成的token即可直接用于调用订阅列表等Azure资源管理接口,权限结构和网页登录获取的token完全一致。
内容的提问来源于stack exchange,提问作者user2347380
相关产品推荐
相关产品推荐

