node.js - AWS api 网关和 cognito 集成

标签 node.js amazon-web-services integration amazon-cognito aws-api-gateway

我正在创建一个 api,我只希望我的身份池中经过身份验证的用户可以访问它。该 API 调用返回“hello world”的 lambda 函数。当我在我的 api 中未设置任何身份验证时,它工作正常,但是当我创建一个自定义授权方并将其设置为我的 api 的身份验证方法时,它返回 null。

This is the link I used to help create my custom authenticator

这是我做过的事情的 list :

  1. 我使用的是 Federate 身份,并确保我在 authorizer.js 中正确复制了身份池 ID 和区域。

  2. 我添加了 Authenticated 角色,在我的联邦身份中设置,ARN 在创建我的自定义授权方时进入执行角色(不确定我是否应该这样做)。

  3. 在我的身份访问管理中,我将 AmazonAPIGatewayInvokeFullAccess 策略附加到 Cognito 授权角色。

  4. 当我没有传递 header 并进行 api 调用时,我收到了未经授权的消息。

  5. 当我在 header 中传递一个假 token 并进行 api 调用时,我收到一条空消息。

  6. 当我在 header 中传递 AWS 提供的 token 并进行 api 调用时,我收到一条空消息。

  7. 当我尝试在 AWS 中测试 api 调用时,我得到了 200 的返回状态和“Hello World”消息

有人知道问题是什么以及如何解决吗?

-更新-
以下是我从链接中的 authorizer.js 文件修改的区域。

console.log('Loading function');

var jwt = require('jsonwebtoken'); 
var request = require('request'); 
var jwkToPem = require('jwk-to-pem');

var userPoolId = '{REPLACE_WITH_YOUR_POOL_ID}';
var region = '{REPLACE_WITH_YOUR_REGION}'; //e.g. us-east-1
var iss = 'https://cognito-idp.' + region + '.amazonaws.com/' + userPoolId;
var pems;

我唯一做的就是添加我的同源 userPoolId 和区域。

最佳答案

我才刚刚开始,所以我可能是错的。

我认为在这种情况下,重要的是要认识到 AWS 提供了两种独立的服务:

  1. 用户池——身份提供者
  2. 身份池--联合身份管理服务

重要的是,用户池可以用作身份池的身份提供者。

现在关于您的问题,您会注意到您引用的链接用于为用户池 设置自定义授权方。传递您从 Facebook 收到的 token 将无法使用您拥有的代码。它需要是用于验证来自 Facebook 的 token 的代码。

如果您有兴趣将 API 网关与身份池结合使用,那么您需要使用身份池 sdk 生成一个临时访问 token ,然后可将其用于与您的端点进行交互。

您可以设置端点的授权设置以使用 AWS_IAM,而不是使用自定义授权方。

我认为您遇到的问题在很大程度上是亚马逊营销和文档不当造成的。将这两项服务(用户池和身份池)归类在“Cognito”下,这比将它们视为真正的两个独立服务更令人困惑。通常文档或营销会说 Cognito 可以做这个或那个,让人不清楚哪个提供哪个功能。称它们为两个池只会让事情变得更糟。

更新: 一些详细介绍如何使用 API Gateway 和 Cognito 的资源:

关于node.js - AWS api 网关和 cognito 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909036/

相关文章:

node.js - Mongodb全文搜索,获取文档中匹配的字符串

node.js - 加载共享库时出错 : libpng16. so.16

node.js - 通过 aws codebuild 为 nodejs lambda 创建 zip 文件的问题

database-design - 构建两个独立数据库集成的最佳方法?

node.js、pg、postgresql 和插入查询(应用挂起)

javascript - 使用 Browserify 捆绑 CasperJS+SlimerJS 代码?

mysql - 在 Amazon EC2 实例上安装 phpMyAdmin

javascript - AWS Cognito 的安全性如何?

css - 使用 Greasemonkey,是否可以使脚本的某些部分适用于某些站点而其他部分适用于不同的站点?

tomcat - 为什么是 red5 和 tomcat?