如何使用C列出具有当前azure凭据的订阅(不注册应用程序)#
我正在尝试以编程方式创建多个虚拟机以进行多个订阅。所以我需要列出我可以访问的所有订阅。但我无法向已注册的应用授予权限,因此我必须使用自己的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()); 及 但它们都无法编译 问题的答案几乎就是我问题的答案,但我不能添加评论来询
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我已经更新了我的答案~令牌将在将来过期我将尝试它,thxSubscriptionClient 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();
}
}
}
}
}