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

时间:2020-11-12 18:07:35

标签: c# azure azure-managed-identity

我正在尝试使用managedIdentity获取令牌,然后可以使用该令牌列出资源组中的资源。尝试获取令牌时出现错误。 GetToken()api似乎在内部向我提供的范围添加了其他字符串(offline_access openid),但该范围不是有效的url失败。从错误中看来,我没有正确使用api。但是我也在关注文档。有人可以帮忙找出我代码中的问题吗。

代码:

var managedIdentityCredential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = managedIdentityId });
var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App");
AccessToken accessToken = managedIdentityCredential.GetToken(new TokenRequestContext(new string[] { "https://management.azure.com/" }));

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

1 个答案:

答案 0 :(得分:0)

要获取具有MSI(托管身份)的令牌,请确保您在Azure services that support the managed identity中运行了代码。

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

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