You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用REST API生成的AccessToken登录Azure容器注册表(ACR)

问题描述

我通过ACR的REST端点生成了AccessToken,但不知道如何用它完成Docker登录。在ACR仓库范围权限的文档里,UI和CLI操作都会用到用户名,但通过REST API生成Token时并没有返回用户名。

我使用的REST API请求(已修改值):

GET /oauth2/token?service=demoregistry.azurecr.io&scope=registry:catalog:* HTTP/1.1
Host: demoregistry.azurecr.io
Authorization: Basic ZGVtb3JlZ2lzdHJ5OmNDZWJ3UU9jN1BzM1poQndGMzg2LzBPdndCZU1vTQ==

已尝试的方法

  • 使用注册表用户名 + AccessToken作为密码,报错:unauthorized: incorrect username or password
  • 使用rid/jti作为用户名 + AccessToken作为密码,报错:unauthorized: Application not registered with AAD

生成的Token(已修改值)

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "QWFG:M237:K2HA:33DK:5PGT:CA3M:DBN3:XOQB:A5QB:I63Q:AT3Q:NQAK"
}

Payload

{
  "jti": "69853560-dc76-4458-8bac-137f33121e39",
  "sub": "demoregistry",
  "nbf": 1669691010,
  "exp": 1669695510,
  "iat": 1669691010,
  "iss": "Azure Container Registry",
  "aud": "demoregistry.azurecr.io",
  "version": "1.0",
  "rid": "f013d21b1c1349ecb85457182a1b1466",
  "access": [
    {
      "Type": "registry",
      "Name": "catalog",
      "Actions": [
        "*"
      ]
    }
  ],
  "roles": [
    "Owner"
  ],
  "grant_type": "access_token"
}

解决方案

正确登录方式

使用ACR OAuth2端点生成的JWT令牌登录Docker时,用户名可填写任意非空字符串(官方推荐使用00000000-0000-0000-0000-000000000000或token),密码直接用获取到的完整JWT令牌。

执行命令:

docker login demoregistry.azurecr.io -u 00000000-0000-0000-0000-000000000000 -p "你的JWT令牌内容"

失败原因说明

  1. 注册表用户名+Token的组合:混淆了“换取Token的认证凭据”和“Token的使用逻辑”,注册表用户名密码是用来生成Token的,不能和Token组合作为登录凭据。
  2. rid/jti作为用户名:这两个是JWT的元数据字段,并非ACR认可的登录用户名格式,系统会误判为AAD认证流程,因此报错。

验证登录

登录成功后,可通过以下命令验证权限:

# 查看仓库列表(对应你的token scope: registry:catalog:*)
docker search demoregistry.azurecr.io

内容的提问来源于stack exchange,提问作者PSKP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:15:31