如何使用Azure容器注册表令牌调用/_tags端点?
问题背景
我通过Azure容器注册表(ACR)的令牌菜单生成了访问令牌,希望用它调用特定镜像的/_tags端点,但始终无法成功。目前该令牌可以正常在PowerShell中执行docker login命令登录ACR,但只有使用管理员账户凭据时,调用/_tags API才能成功。
我参考了ACR标签列表的官方API文档,尝试了两种认证方式,但都返回401未授权错误:
- 直接用令牌名称和密码做Basic认证
- 先通过
oauth2/token接口获取Bearer令牌,再用该令牌认证
尝试的代码
var registryUrl = "https://myRegistry.azurecr.io"; // 初始化HTTP客户端 var httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(registryUrl); byte[] byteArray = Encoding.ASCII.GetBytes($"tokenName:tokenPassword"); // Azure令牌界面提供的凭据 httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); // 调用/_tags端点获取镜像标签列表 var imageReference = "my-image"; var response = await httpClient.GetAsync($"/acr/v1/{imageReference}/_tags"); if (response.IsSuccessStatusCode) { var json = await response.Content.ReadAsStringAsync(); var imageTagResponse= JsonConvert.DeserializeObject<DockerImageRegistryResponse>(json); foreach (var tag in imageTagResponse.Tags) { Console.WriteLine(tag.Name); } }
返回的错误信息
{ "errors": [ { "code": "UNAUTHORIZED", "message": "authentication required, visit https://aka.ms/acr/authorization for more information.", "detail": [ { "Type": "repository", "Name": "my-image", "Action": "metadata_read" } ] } ] }
已做的排查
看到错误信息里的Action字段后,我给令牌创建了明确包含metadata_read权限的自定义作用域,但问题依然存在。
后续补充
- 一开始我怀疑这是ACR令牌刚退出预览版导致的Bug,尝试在ACR的GitHub仓库提交问题,但发现该仓库不支持提交问题
- 想创建Azure支持工单,却发现入口藏在IAM界面的自定义“Support Request Contributor”角色下,提交Bug的流程过于繁琐
内容的提问来源于stack exchange,提问作者Felix Castor
相关产品推荐
相关产品推荐

