AWS api网关和认知集成

我正在创build一个api,我只希望它可以在身份validation池中通过身份validation的用户访问。 api调用返回“hello world”的lambda函数。 当我在我的api中设置没有身份validation它工作正常,但是当我创build一个自定义授权者,并将其设置为我的身份validation方法为我的API它返回null。

这是我用来帮助创build自定义身份validation器的链接

这里是我做的东西的列表:

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

  2. 我在创build我的自定义授权者(不确定是否应该这样做)时,添加了在我的联合身份validation中设置的已validationangular色,ARN进入了执行angular色。

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

  4. 当我没有通过标题,并进行API调用,我得到一个未经授权的消息。

  5. 当我在头部传递一个伪造的令牌并且做了api调用时,我得到一个空消息。

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

  7. 当我尝试在AWS中testingapi调用时,返回状态为200,并显示“Hello World”消息

任何人都知道问题是什么以及如何解决这个问题?

-Update-
以下是我从链接的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}'; //eg us-east-1 var iss = 'https://cognito-idp.' + region + '.amazonaws.com/' + userPoolId; var pems; 

我做的唯一的事情是添加了我的同类userPoolId和区域。

我刚开始这样做,所以我可能是错的。

我认为在这种情况下重要的是要认识到AWS有两个独立的服务:

  1. 用户池 – 身份提供者
  2. 身份池 – 联合身份pipe理服务

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

现在关于您的问题,您会注意到您引用的链接是为用户池设置自定义授权人。 传递从Facebook接收的令牌不适用于您的代码。 这将需要代码来validation来自Facebook的令牌。

如果您有兴趣使用带有身份池的API网关,那么您将需要使用Identity Pool sdk来生成临时访问令牌,然后可以使用该令牌来与您的端点进行交互。

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

我想你遇到的问题在很大程度上是由于亚马逊部分营销和文档不佳的结果。 将“Cognito”下的两个服务(User Pools和Identity Pools)进行分类使得事情变得比将它们当做两个单独的服务更加混乱。 文档或市场营销通常会说Cognito可以做到这一点,也就是说,不清楚哪一个提供哪种function。 调用他们两个池只会让事情变得更糟。

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

API Gateway最近推出了对Cognito用户池的第一方支持。 您不必再使用Lambda设置自定义授权程序。 只需在API网关中设置一个用户池授权器,并使用它来从您的池中validation用户。 关于设置的细节可以在这里find。

希望这有助于Ritisha。