Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中使用托管标识向Azure资源管理器进行身份验证#_C#_Azure_Azure Managed Identity - Fatal编程技术网

C# 如何在C中使用托管标识向Azure资源管理器进行身份验证#

C# 如何在C中使用托管标识向Azure资源管理器进行身份验证#,c#,azure,azure-managed-identity,C#,Azure,Azure Managed Identity,我试图使用managedIndentity获取一个令牌,然后可以使用它列出资源组中的资源。我在尝试获取令牌时出错。GetToken()api似乎正在向我提供的作用域内部添加其他字符串(offline\u access openid),但未能确定该作用域不是有效的url。从错误中可以看出,我没有正确使用api。但我也在关注文档。有人能帮我找出代码中的问题吗 代码: 错误: Azure.Identity.AuthenticationFailedException:SharedTokenCacheCr

我试图使用managedIndentity获取一个令牌,然后可以使用它列出资源组中的资源。我在尝试获取令牌时出错。GetToken()api似乎正在向我提供的作用域内部添加其他字符串(offline\u access openid),但未能确定该作用域不是有效的url。从错误中可以看出,我没有正确使用api。但我也在关注文档。有人能帮我找出代码中的问题吗

代码:

错误: Azure.Identity.AuthenticationFailedException:SharedTokenCacheCredential身份验证失败。-->Microsoft.Identity.Client.MsalServiceException:AADSTS70011:提供的请求必须包含“范围”输入参数。为输入参数“scope”提供的值无效。作用域脱机访问openid配置文件无效。作用域格式无效。作用域必须采用有效的URI格式或有效的Guid。

若要使用MSI(托管标识)获取令牌,请确保在中运行代码

为服务启用系统分配的MSI后,直接使用下面的代码

var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App");
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/").Result;
Console.WriteLine(accessToken)

您好,如果有帮助,请将其标记为答案,只需单击“谢谢”。谢谢@joywang的回复。当我运行代码时,出现异常:AzureServiceTokenProviderException,消息为“尝试使用托管服务标识获取令牌。无法获取访问令牌。发送请求时出错。”。此错误是可以理解的,因为执行代码的帐户不是托管标识本身,而是被授予对托管标识上的“托管应用程序操作员角色”角色的访问控制(IAM)权限的AD应用程序。托管标识反过来对我希望访问的资源组具有读卡器访问权限。可能令牌是错误的。下面是访问密钥库的示例:`var mICredential=new DefaultAzureCredential(new DefaultAzureCredentialOptions{ManagedIdentityClientId=managedIdentityId});新的SecretClient(新Uri(keyVault.VaultUri),mICredential);`以类似的方式,我如何给出一个示例来列出托管标识可以访问的资源组中的资源?在本例中,我通过模拟器在本地运行,以测试这些操作(其工作原理是作为广告应用程序执行,我们必须授予角色访问my Azure资源(如密钥保险库和Azure资源组)的权限)@SharathMalladi如果您在本地运行代码,为什么需要使用MSI?MSI在本地不起作用,我在回答的第一行中提到了这一点。如果您想在本地运行代码以获取令牌,您可以使用VS auth或服务主体直接进行身份验证,例如,如果您使用服务主体,请使用
var azureServ修改代码iceTokenProvider=new AzureServiceTokenProvider(“RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret}”);
请参见
var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App");
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/").Result;
Console.WriteLine(accessToken)