【问题标题】:Use Amplify credentials to sign HTTP request - Angular使用放大凭据签署 HTTP 请求 - Angular
【发布时间】:2020-06-26 09:13:15
【问题描述】:

我正在使用带有 Amplify (aws-amplify@3.0.11) 和 Aws Amplify Angular (aws-amplify-angular@5.0.11) 库的 Angular 应用程序。

Amplify 设置为通过 AWS API Gateway 与 Cognito 通信,所有授权都通过它。到目前为止一切正常,但现在我有一个特定请求,我需要将 multipart/form-data POST 请求发送到网关上的端点之一,其中包含特定文件。
由于 Amplify 不支持发送“multipart/ form-data”,我需要向 API Gateway 创建一个 HTTP 客户端请求(不带 Amplify),这意味着我需要对其进行签名(v4 签名)。

问题来了。我需要使用来自 Amplify 签名用户的凭据来生成签名,到目前为止这对我不起作用。有谁知道我需要将哪些令牌作为“accessKey”和“secretKey”传递?我无法直接从 Amplify 获取“secretKey”,但尝试使用“Auth.currentUserCredentials()”,它确实返回“accessKeyId”和“secretAccessKey”。

我正在尝试使用 https://github.com/mar753/aws-signature-v4(针对 Typescript 和 Angular 进行了修改)通过发送所需参数来签署请求。

无论我尝试什么组合,我总是收到相同的错误消息 (403):
"message: "请求中包含的安全令牌无效。"

【问题讨论】:

    标签: angular amazon-web-services aws-amplify


    【解决方案1】:

    对于将来会遇到类似问题的任何人,这是您需要做/使用的:

    1. 使用Auth.currentUserCredentials() 获取用户凭据
    2. 设置accessKey为:user.getUserCredentials().accessKeyId
    3. 设置secretAccessKey为:user.getUserCredentials().secretAccessKey
    4. 您还必须在标头中发送安全令牌(在 Amplify 中不这样调用,但它是“sessionToken”):'X-Amz-Security-Token': user.getUserCredentials().sessionToken

    这些是在没有 Amplify 的情况下签署和验证请求所需的凭据,但将其用作授权处理程序。

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多