我成功地使用以下代码(完整代码在此处)来使用 Azure 托管标识进行身份验证(通过 Visual Studio),并且可以访问 Azure 存储账户,而无需使用凭据。
const string storageResource = "https://storage.azure.com/";
var authResult = await azureServiceTokenProvider.GetAuthenticationResultAsync(storageResource, cancellationToken: cancellationToken);
这段代码成功找到了我登录到Visual Studio的用户,并使用它来获取令牌,一切顺利。
然而,此代码作为库集成测试的一部分在Azure DevOps构建管道中执行。
我在创建与Azure DevOps的服务连接时发现了创建的服务主体,并为其授予了相同的Storage Blob数据参与者
角色,希望Azure DevOps会使用它来运行代码,但没有成功。
所以我的问题是:
如何让在Azure DevOps构建管道中运行的代码能够使用AzureServiceTokenProvider
进行身份验证?
顺便说一句,错误消息如下:
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException :参数:连接字符串:[未指定连接字符串],资源:https://storage.azure.com/,权限:。 异常消息:尝试以下3种方法来获取访问令牌,但均未成功。 参数:连接字符串:[未指定连接字符串],资源:https://storage.azure.com/,权限:。 异常消息:尝试使用托管服务标识获取令牌。无法获取访问令牌。重试5次后失败。 MSI响应代码:BadRequest,响应: {"error":"invalid_request","error_description":"Identity not found"} 参数:连接字符串:[未指定连接字符串], 资源:https://storage.azure.com/,权限:。 异常消息:尝试使用Visual Studio获取令牌。无法获取访问令牌。在 "C:\Users\VssAdministrator\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json"中找不到Visual Studio Token提供程序文件 参数:连接字符串:[未指定连接字符串], 资源:https://storage.azure.com/,权限:。 异常消息:尝试使用Azure CLI获取令牌。无法获取访问令牌。错误:请运行'az login'来设置帐户。
TearDown:System.NullReferenceException:对象引用未设置为对象的实例。