C# Azure错误:DefaultAzureCredential身份验证失败
我正在处理官方Azure示例:。并在第行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
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();
}