【发布时间】:2023-04-10 15:05:02
【问题描述】:
我正在尝试使用应用服务的系统分配标识从应用服务(Web API)向 Azure Key Vault 进行身份验证。在 Azure Key Vault 中,我创建了一个访问策略,允许应用服务访问密钥、机密和证书(稍后将限制这一点!)。
在应用服务中,我尝试获取身份验证令牌(请参阅代码 sn-p),但 GetAccessTokenAsync 给了我来自 Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider 的异常,消息如下所示。
搜索,我发现了很多关于这个错误的描述,但没有关于原因或解决方案的有用提示。
请注意,我使用服务主体对同一个密钥保管库进行身份验证没有问题,但使用托管身份的想法当然是避免将客户端 ID 和机密等凭据存储在任何地方
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync(VaultUrl);
Client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
异常信息:
Parameters: Connection String: [No connection string specified], Resource: https://efipsexternals.vault.azure.net/, Authority: . Exception Message: Tried the following 4 methods to get an access token, but none of them worked.\r\nParameters: Connection String: [No connection string specified], Resource: https://<VAULTNAME>.vault.azure.net/, Authority: . Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. Received a non-retryable error. MSI ResponseCode: BadRequest, Response: {\"ExceptionMessage\":\"AADSTS500011: The resource principal named https://<VAULTNAME>.vault.azure.net/ was not found in the tenant named <TENANTID>. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.\\r\\nTrace ID: 52674a60-5e9c-432c-b999-e13e326f2000\\r\\nCorrelation ID: b335c7b2-2f38-4cc0-9ec3-6662c7ee5546\\r\\nTimestamp: 2019-10-27 10:58:52Z\",\"ErrorCode\":\"invalid_resource\",\"ServiceErrorCodes\":[\"500011\"],\"StatusCode\":400,\"Message\":null,\"CorrelationId\":\"102c92f1-525a-44ee-a383-d7e40ccd2ed4\"}\r\nParameters: Connection String: [No connection string specified], Resource: https://<VAULTNAME>.vault.azure.net/, Authority: . Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Visual Studio Token provider file not found at \"D:\\local\\LocalAppData\\.IdentityService\\AzureServiceAuth\\tokenprovider.json\"\r\nParameters: Connection String: [No connection string specified], Resource: https://<VAULTNAME>.vault.azure.net/, Authority: . Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. 'az' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n\r\nParameters: Connection String: [No connection string specified], Resource: https://<VAULTNAME>.vault.azure.net/, Authority: https://login.microsoftonline.com/common. Exception Message: Tried to get token using Active Directory Integrated Authentication. Access token could not be acquired. Failed to get user name from the operating system.Inner Exception : The format of the specified domain name is invalid\r\n
【问题讨论】:
-
根据我的测试,您可以删除
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync(VaultUrl);is -
@JackJia,你是绝对正确的。我可以建议您在答案中重复一遍,以便我接受吗?
-
谢谢。添加了我的答案。
标签: azure-web-app-service azure-keyvault azure-managed-identity