我设法让下面的代码工作(完整的代码在这里)使用 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 中创建与 Azure 的服务连接时创建的服务主体,并赋予它相同的Storage Blob Data Contributor
角色,希望 Azure DevOps 使用它来运行代码,但没有成功。
所以我的问题是:
如何获取在 Azure DevOps 构建管道中运行的代码,以便能够使用AzureServiceTokenProvider
?
顺便说一句,错误消息:
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:连接字符串:[未指定连接字符串],资源:https ://storage.azure.com/ ,权限:。异常消息:尝试了以下 3 种方法来获取访问令牌,但都没有奏效。参数:连接字符串:[未指定连接字符串],资源:https ://storage.azure.com/ ,权限:。异常消息:尝试使用托管服务标识获取令牌。无法获取访问令牌。重试 5 次后失败。MSI ResponseCode:BadRequest,响应:{"error":"invalid_request","error_description":"Identity not found"} 参数:连接字符串:[未指定连接字符串],资源:https:, 权威: 。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。在“C:\Users\VssAdministrator\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json”中找不到 Visual Studio 令牌提供程序文件参数:连接字符串:[未指定连接字符串],资源:https://storage.azure。 com/ , 权限: . 异常消息:尝试使用 Azure CLI 获取令牌。无法获取访问令牌。错误:请运行“az login”来设置帐户。
TearDown : System.NullReferenceException : 对象引用未设置为对象的实例。