来自 AWS CLI 与 API 的不同令牌
Differing tokens from AWS CLI vs API
使用 aws ecr get-login-password --region us-east-1
的 AWS CLI 命令时,我得到了一个大小合理的令牌,可用于我的 Docker 命令。但是,使用 API 会生成一个更大的无效令牌,并在尝试 Docker 登录时导致 400 错误。
var ecrClient = new AmazonECRClient(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USEast1);
var tokenResponse = await ecrClient.GetAuthorizationTokenAsync(new GetAuthorizationTokenRequest());
var token = tokenResponse.AuthorizationData.Single().AuthorizationToken;
awsAccessKeyId
和 awsSecretAccessKey
从 API 用法到 CLI 用法都是相同的(当执行 aws configure
并在那里设置它们时)。 API 的文档有点稀疏,我错过了什么(或误解)?
原来 API 的响应是 Base64Encoded(它实际上在文档中说,我只是假设来自 CLI 的令牌也被编码并且我不需要解码它,按给定的方式传递它)。
通过以下方式解码:
var tokenData = Convert.FromBase64String(tokenResponse.AuthorizationData.Single().AuthorizationToken);
var tokenContent = Encoding.UTF8.GetString(tokenData);
Returns 格式为 Foo:bar
的字符串,其中 bar
是与 CLI 中的 return 匹配的标记。因此,将其拆分为冒号可为您提供与通过 CLI 相同的信息。
使用 aws ecr get-login-password --region us-east-1
的 AWS CLI 命令时,我得到了一个大小合理的令牌,可用于我的 Docker 命令。但是,使用 API 会生成一个更大的无效令牌,并在尝试 Docker 登录时导致 400 错误。
var ecrClient = new AmazonECRClient(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USEast1);
var tokenResponse = await ecrClient.GetAuthorizationTokenAsync(new GetAuthorizationTokenRequest());
var token = tokenResponse.AuthorizationData.Single().AuthorizationToken;
awsAccessKeyId
和 awsSecretAccessKey
从 API 用法到 CLI 用法都是相同的(当执行 aws configure
并在那里设置它们时)。 API 的文档有点稀疏,我错过了什么(或误解)?
原来 API 的响应是 Base64Encoded(它实际上在文档中说,我只是假设来自 CLI 的令牌也被编码并且我不需要解码它,按给定的方式传递它)。
通过以下方式解码:
var tokenData = Convert.FromBase64String(tokenResponse.AuthorizationData.Single().AuthorizationToken);
var tokenContent = Encoding.UTF8.GetString(tokenData);
Returns 格式为 Foo:bar
的字符串,其中 bar
是与 CLI 中的 return 匹配的标记。因此,将其拆分为冒号可为您提供与通过 CLI 相同的信息。