如何在AWS Lambda中验证Cognito访问令牌以允许Gateway API调用?

时间:2016-06-23 06:55:54

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

我要做的是为我的Lambda函数设置API网关,以便在DynamoDB中保存一些(或者我想仅为登录用户使用的其他内容)。但我不明白如何验证AccessToken以及如何从中获取用户。

我在AWS论坛上发现了这个post,我决定尝试方法1。

Cognito用户池+ API网关+ API网关自定义授权程序+ Cognito用户池访问令牌。

所以现在我已登录用户:

var authenticationData = {
  Username : 'username', // your username here
  Password : 'password', // your password here
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
  onSuccess: function (result) {
    console.log('access token + ' + result.getAccessToken().getJwtToken());
....

和他的accessToken。我还在API调用中设置了自定义API网关自定义授权程序。

现在我应该验证访问令牌并决定是允许还是拒绝方法调用。但我不明白该怎么做以及如何从令牌中检索用户?

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

您不需要API网关自定义授权程序...只需对API端点进行身份验证 - 转到其方法请求并选择AWS_IAM进行授权下拉列表..其中默认选择NONE ...

当访问令牌发送到此终点时 - 它将自动检查访问令牌角色(与cognito服务通信后)并检查随角色附加的策略。

如果IAM策略允许调用此端点 - AWS API将进一步执行它,否则它将使您返回403错误或某些错误

您不需要编写任何代码 - 除非您有一些完全不同的auth逻辑要应用 - 这可以通过" API网关自定义授权程序"

实现

答案 2 :(得分:0)

适用于Cognito用户池+ API网关+ API网关自定义授权程序+ Cognito用户池访问令牌

您应该创建Cognito Authorizer(在创建自定义授权程序时作为选项提供)并链接您的用户池&身份池,然后客户端需要发送idToken(使用用户池SDK生成)来访问端点。此idToken将通过Coginito Authorizer(在授权方法下拉列表中使用)通过Cognito Identity Pool进行验证。

由SDK生成的idToken可以使用另一个lambda +端点(如登录端点)完成,也可以使用cognito mobile sdk生成。