C# Azure错误:DefaultAzureCredential身份验证失败

C# Azure错误:DefaultAzureCredential身份验证失败,c#,azure,azure-sdk-.net,azure-sdk,C#,Azure,Azure Sdk .net,Azure Sdk,我正在处理官方Azure示例:。并在第行resourceGroup=await resourceGroups.CreateOrUpdateAsync(resourceGroupName,resourceGroup)上获取以下错误。我已经按照注册应用程序的说明进行了操作,并根据示例提供的说明进行了操作。并有以下资料: 错误: Azure.Identity.AuthenticationFailedException HResult=0x80131500 消息=DefaultAzureCredent

我正在处理官方Azure示例:。并在第行
resourceGroup=await resourceGroups.CreateOrUpdateAsync(resourceGroupName,resourceGroup)上获取以下错误资源组的以下代码的code>。我已经按照注册应用程序的说明进行了操作,并根据示例提供的说明进行了操作。并有以下资料:

错误

Azure.Identity.AuthenticationFailedException HResult=0x80131500 消息=DefaultAzureCredential身份验证失败。 Source=Azure.Identity

内部例外2: MsalServiceException:AADSTS70002:客户端不存在或未为使用者启用。如果您是应用程序开发人员,请通过Azure门户中的应用程序注册配置新应用程序

更新

根据示例中的说明,以下是我的操作方法。我可能在这里没做什么。请让我知道我现在没有做什么:

访问控制(IAM)中已注册应用的角色分配

身份验证和直接URI

已注册应用程序的API权限

更新-2

通过使用
@JoyWan
,我能够解决这个问题(谢谢Joy)。下面是成功创建所有必需的
计算资源的屏幕截图,包括
VM
注意:单击图像可以更好地查看屏幕截图


我测试了代码,它在我这方面运行良好。你提到的步骤也是正确的

在本示例中,实际使用了In-local,因此如果您在local中运行代码,请确保您已使用AD应用程序
客户端ID、客户端机密、租户ID

更新:


从@nam的评论来看,问题是环境变量昨天没有刷新,因为他昨天关闭了机器,今天又重新启动了机器,环境变量同步了,因此应用程序开始工作。

你在哪里运行代码?@JoyWang我在家里最新版本的
VS2019
中本地运行了代码。我有Azure订阅,我按照示例的指示在那里注册了一个应用。我认为问题可能与我没有正确地为我在Azure中注册的应用分配权限有关。我已经在我的帖子中添加了一个更新部分,因此您可以告诉我@nam我认为这是正确的,您是否将角色添加到了
订阅范围的服务主体中
?注册的应用程序具有所有者角色(显示在更新部分的第一个屏幕截图中)。这就是你要问的吗?我就是这样做的:单击我的订阅-->访问控制(IAM)-->单击添加角色分配-->角色:所有者上的添加按钮。将访问权限分配给:Azure AD用户、组或服务主体。选择:我的注册应用程序。该屏幕类似于我上面文章更新前部分的第一个屏幕截图。我错过了什么,或者我还需要做什么?@nam我认为所有这些都应该是正确的,这很奇怪,你能确保
客户ID、客户机密、租户ID、订阅ID
在你的环境中都是正确的吗?或者你可以创建一个新的广告应用来尝试一下吗?在不更改任何内容的情况下,只需为其创建一个秘密,并将应用程序添加为订阅中的角色。请参阅更新-2。当我今天读了你的评论后再次运行应用程序时,它开始工作了。因此,问题在于,当我创建项目时,
environment var
昨天没有刷新,因为机器可能需要重新启动才能使
environment var
开始工作(同步)。但是,由于我昨天关闭了机器,今天又重新启动了机器,
环境变量
同步,因此应用程序开始工作。谢谢你走过了整个过程。您可能希望将其设置为
响应
,我将其标记为
回答
,这样其他人也可以从中受益。
static async Task Main(string[] args)
{
    var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
    var resourceClient = new ResourcesManagementClient(subscriptionId, new DefaultAzureCredential());

    // Create Resource Group
    Console.WriteLine("--------Start create group--------");
    var resourceGroups = resourceClient.ResourceGroups;
    var location = "westus2";
    var resourceGroupName = "QuickStartRG";
    var resourceGroup = new ResourceGroup(location);
    resourceGroup = await resourceGroups.CreateOrUpdateAsync(resourceGroupName, resourceGroup);
    Console.WriteLine("--------Finish create group--------");

    // Create a Virtual Machine
    await Program.CreateVmAsync(subscriptionId, "QuickStartRG", location, "quickstartvm");

    // Delete resource group if necessary
    //Console.WriteLine("--------Start delete group--------");
    //await (await resourceGroups.StartDeleteAsync(resourceGroupName)).WaitForCompletionAsync();
    //Console.WriteLine("--------Finish delete group--------");
    //Console.ReadKey();
}