使用 Amplify 凭据签署 HTTP 请求 - Angular

Use Amplify credentials to sign HTTP request - Angular

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

A​​mplify 设置为通过 AWS API 网关与 Cognito 通信,所有授权都通过它。到目前为止一切正常,但现在我有一个特定的请求,我需要将 multipart/form-data POST 请求发送到具有特定文件的网关端点之一。
As Amplify does' t 支持发送 "multipart/form-data",我需要创建一个 HTTP 客户端请求到 API 网关(没有 Amplify),这意味着我需要对其进行签名(v4 签名)。

问题来了。我需要使用来自 Amplify 签名用户的凭据来生成签名,到目前为止这对我不起作用。有谁知道我需要传递什么标记作为 "accessKey" & "secretKey"?我无法直接从 Amplify 获取 "secretKey",但已尝试使用 "Auth.currentUserCredentials()" 确实 returns "accessKeyId" 和 "secretAccessKey".

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

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

对于将来遇到类似问题的任何人,这是您需要的do/use:

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

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