【问题标题】:Differing tokens from AWS CLI vs APIAWS CLI 与 API 的不同令牌
【发布时间】:2021-05-13 19:43:42
【问题描述】:

当使用 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;

awsAccessKeyIdawsSecretAccessKey 从 API 使用到 CLI 使用都是相同的(在执行 aws configure 并将它们设置在那里时)。 API 的文档有点稀疏,我遗漏了什么(或误解)?

【问题讨论】:

  • get-login-passwordget-authorization-token 是两个不同的 API 调用,目的不同。为什么在 CLI 中使用第一个,而在 c# 中使用第二个?
  • @Marcin 因为 .GetAuthorizationTokenAsync 的文档暗示它是 get-login-password 的 API 版本(如果这是对参考文档的错误阅读,那么他们可能应该删除对 CLI 的引用该方法描述中的命令或更好地阐明您需要做什么)。
  • 我明白了,你是对的。你有没有关注instructions关于如何使用这个api?
  • @Marcin 使用 CLI 命令,我能够成功地将令牌传递给 docker login 没有其他任何东西(只有其他参数是用户名和它正在登录的结尾)。我希望我能够对 API 提供的令牌做同样的事情,实际上我希望得到相同的令牌,但是我得到了一个更大的令牌并且它无法工作。如果我需要对 API 令牌做一些不同的事情,那就是我正在寻找的。​​span>

标签: c# amazon-web-services amazon-ecr


【解决方案1】:

原来来自 API 的响应是 Base64Encoded(它确实说在文档中,我只是假设来自 CLI 的令牌也被编码并且我不需要解码它,只需传递它给定的)。

通过以下方式解码:

var tokenData = Convert.FromBase64String(tokenResponse.AuthorizationData.Single().AuthorizationToken);
var tokenContent = Encoding.UTF8.GetString(tokenData);

返回格式为Foo:bar 的字符串,其中bar 是与CLI 返回匹配的标记。因此,在冒号上拆分它会为您提供与通过 CLI 相同的信息。

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2022-01-18
    • 2014-11-25
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多