如何使用C列出具有当前azure凭据的订阅(不注册应用程序)#

如何使用C列出具有当前azure凭据的订阅(不注册应用程序)#,azure,azure-devops,azure-active-directory,azure-cli,azure-authentication,Azure,Azure Devops,Azure Active Directory,Azure Cli,Azure Authentication,我正在尝试以编程方式创建多个虚拟机以进行多个订阅。所以我需要列出我可以访问的所有订阅。但我无法向已注册的应用授予权限,因此我必须使用自己的Azure凭据 然后我试着 var subscriptionClient = new Microsoft.Azure.Management.ResourceManager.Fluent.SubscriptionClient(new DefaultAzureCredential()); 及 但它们都无法编译 问题的答案几乎就是我问题的答案,但我不能添加评论来询

我正在尝试以编程方式创建多个虚拟机以进行多个订阅。所以我需要列出我可以访问的所有订阅。但我无法向已注册的应用授予权限,因此我必须使用自己的Azure凭据

然后我试着

var subscriptionClient = new Microsoft.Azure.Management.ResourceManager.Fluent.SubscriptionClient(new DefaultAzureCredential());

但它们都无法编译

问题的答案几乎就是我问题的答案,但我不能添加评论来询问更多关于它的问题

我安装了Microsoft.IdentityModel.Clients.ActiveDirectory版本3.13.2.870并尝试:

 var ctx = new AuthenticationContext("https://login.microsoftonline.com/common");
但是ctx没有AcquireToken,它只有AcquireTokenAsync。不幸的是,下面的代码仍然不起作用

var mainAuthRes = await context.AcquireTokenAsync(m_resource, m_clientId, new Uri(m_redirectURI), PromptBehavior.Always);
编译器说第四个参数是错误的,这意味着

context.AcquireTokenAsync(string resource, string client , Uri uri , PromptBehavior promptBehavior )
不是有效的方法


是否有任何方法可以使用C#列出使用我当前azure凭据(不注册应用程序)的订阅?

您可以尝试使用REST API

请求标头:

Authorization: Bearer <access token>
Authorization:持票人并使用您的帐户登录

然后单击脚本右上角的“试用”

您将在请求预览中找到访问令牌


试试这段代码,它使用of进行身份验证,它将列出您可以访问的所有AAD租户中的所有订阅(登录到VS的用户帐户)


您提到的答案看起来是正确的,您是否可以显示错误消息的详细信息,而不是像
这样的内容,但都失败了
仍然不起作用
?它们是无用的。它无法编译。SubscriptionClient的构造函数需要一个RestClient作为其参数。如何获取访问令牌?@Milhouse Manastorm我已经更新了我的答案~令牌将在将来过期我将尝试它,thx
SubscriptionClient SubscriptionClient=new SubscriptionClient(serviceClientCredentials)不编译。SubscriptionClient的名称空间是什么?我尝试了Microsoft.Azure.Management.ResourceManager.Fluent.SubscriptionClient,但没有compile@MilhouseManastorm并非如此,它是Microsoft.Azure.Management.ResourceManager的预览版,nuget它适合我。非常感谢。
GET https://management.azure.com/subscriptions?api-version=2020-01-01
Authorization: Bearer <access token>
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Management.ResourceManager;
using Microsoft.Rest;
using System;
using System.Threading;

namespace ConsoleApp2
{
    class Program
    {
        public static void Main(string[] args)
        {
            VisualStudioCredential tokenCredential = new VisualStudioCredential();
            TokenRequestContext requestContext = new TokenRequestContext(new string[] { "https://management.azure.com" });
            CancellationTokenSource cts = new CancellationTokenSource();
            var accessToken = tokenCredential.GetToken(requestContext, cts.Token);
            ServiceClientCredentials serviceClientCredentials = new TokenCredentials(accessToken.Token);
            SubscriptionClient SubscriptionClient = new SubscriptionClient(serviceClientCredentials);
            var tenants = SubscriptionClient.Tenants.List();
            foreach (var tenant in tenants)
            {
                //Console.WriteLine(tenant.TenantId);
                VisualStudioCredentialOptions visualStudioCredentialOptions = new VisualStudioCredentialOptions{ TenantId = tenant.TenantId };
                VisualStudioCredential tokenCredential1 = new VisualStudioCredential(visualStudioCredentialOptions);
                TokenRequestContext requestContext1 = new TokenRequestContext(new string[] { "https://management.azure.com" });
                CancellationTokenSource cts1 = new CancellationTokenSource();
                var accessToken1 = tokenCredential1.GetToken(requestContext, cts1.Token);
                ServiceClientCredentials serviceClientCredentials1 = new TokenCredentials(accessToken1.Token);
                SubscriptionClient SubscriptionClient1 = new SubscriptionClient(serviceClientCredentials1);
                var subs = SubscriptionClient1.Subscriptions.List();
                foreach (var sub in subs)
                {
                    //Console.WriteLine(sub.DisplayName);
                    Console.WriteLine($"SubscriptionName : {sub.DisplayName}");
                    Console.WriteLine($"SubscriptionId   : {sub.SubscriptionId}");
                    Console.WriteLine($"TenantId         : {tenant.TenantId}");
                    Console.WriteLine($"State            : {sub.State}");
                    Console.WriteLine();
                }

            }
        }
            
    }
}