通过API Gateway和邮递员使用Cognito联合身份

时间:2018-11-26 15:59:22

标签: amazon-web-services postman aws-api-gateway amazon-cognito

我的目标是让我的用户使用Cognito登录并获得一个临时IAM角色,该角色允许他们通过HTTP访问API网关中的特定方法。

到目前为止我所做的:

  • 设置我的用户池
  • 设置我的身份池
  • 为经过身份验证和未经身份验证的用户设置IAM角色

  • 设置一个具有IAM角色的组,以允许访问POST到( 当前)所有API网关方法。

  • 将我的用户加入群组

  • 设置我的API网关方法以使用IAM授权

我可以使用Amplify创建的前端在浏览器中通过Cognito登录。

当我检查浏览器的本地存储时,我可以看到以下内容:

  • idToken
  • accessToken
  • refreshToken

在API网关上使用COGNITO授权者完成此操作后,我在Postman中要做的就是添加一个Authorization标头并粘贴在idToken中。这使我可以访问API。

如何使用具有IAM授权的Postman测试我的API?

我仍然获得令牌,但是现在将它们粘贴到Authorization标头中会给我一个错误消息:

Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header.

我已阅读到我需要签署请求,但不确定如何从基于Web浏览器的应用程序中执行此操作。

即使我能做到这一点,如何在Postman中进行测试,还是不再可能?

1 个答案:

答案 0 :(得分:0)

好吧,仍然可以通过Postman发出请求,但它们必须为Amazon的Sigv4格式。

解决方法如下。

  1. 获取登录过程中返回的accessKeysecretKeysessionToken *。

  2. 在邮递员中,对于请求,选择Authorization标签,然后为type选择AWS Signature

  3. 将从步骤1中检索到的accessKeysecretKeysessionToken输入到Postman中的相应字段。

  4. 您还需要设置AWS Region,例如eu-central-1

  5. 按SEND。

邮递员将创建适当的Sigv4请求以调用您的API。您可以在邮递员的Headers标签中查看此请求的结果,该请求将自动创建所需的标头。

*我在我的React / Amplify应用程序中添加了临时代码。