amazon-web-services - 将 Cognito 联合身份与 API Gateway 和邮递员结合使用
问题描述
我的目标是让我的用户使用 Cognito 登录并获得一个临时 IAM 角色,允许他们通过 HTTP 访问 API Gateway 中的特定方法。
到目前为止我做了什么:
- 设置我的用户池
- 设置我的身份池
为经过身份验证和未经身份验证的用户设置 IAM 角色
设置一个具有 IAM 角色的组,允许访问(目前)所有 API 网关方法的 POST。
将我的用户加入群组
设置我的 API Gateway 方法以使用
IAM
授权
我可以使用通过 Amplify 创建的前端在浏览器中通过 Cognito 登录。
当我签入浏览器本地存储时,我可以看到我有以下内容:
idToken
accessToken
refreshToken
当我COGNITO
在 API 网关上使用授权方完成此操作后,我在 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 中进行测试,或者这不再可能?
解决方案
好的,仍然可以通过 Postman 发出请求,但它们必须是 Amazon 的 Sigv4 格式。
解决方法如下。
获取
accessKey
,secretKey
并sessionToken
从登录过程中返回*。在 Postman 中,对于请求,选择
Authorization
选项卡并type
选择AWS Signature
。accessKey
将步骤 1 中检索到的secretKey
和输入sessionToken
到 Postman 中的相应字段中。您还需要设置
AWS Region
egeu-central-1
。按发送。
Postman 将创建适当的 Sigv4 请求来调用您的 API。您可以在 Postman 的请求选项卡中看到此结果,Headers
它将自动创建所需的标头。
*我在我的 React/Amplify 应用程序中添加了临时代码来执行此操作。
推荐阅读
- html - 更改容器宽度属性时如何触发列响应?
- fat-free-framework - 在 Fat Free Framework 中,是否可以在模板中显示缺失的键?
- java - 在 OjAlgo 的 Primitive64Store 中的特定列和行处插入 Access2D 元素
- html - Fullcalendar 一半时间GridWeek 像一天一样查看GridWeek
- python - 如何在 Python 中打印字符串中的内容?
- python - 如何在python中导出虚拟环境设置
- mysql - MYSQL UPDATE 表上 INSERT 到同一个表
- angular - 在 Typescript 项目之间共享接口
- django - 为什么我们首先在 Django 表单中使用实例作为第二个参数而不是现有数据库条目
- node.js - 如何从 express +Node.js 中的 url 获取 {{id}}