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

How to get validate Cognito Access Token in AWS Lambda to allow Gateway API call?

我想做的是设置 API 到我的 Lambda 函数的网关,该函数将一些内容保存在 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 Gateway Custom Authorizer。

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

请查看此博客上的示例代码post:https://mobile.awsblog.com/post/Tx3JK25U7Z9EUIU/Integrating-Amazon-Cognito-User-Pools-with-API-Gateway

您不需要 API 网关自定义授权器...只是为了验证 API 端点 - 转到其方法请求和 select AWS_IAM 授权下拉列表.. 默认情况下 NONE 是 selected ...

当访问令牌发送到此端点时 - 它将自动检查访问令牌角色(在与认知服务通信后)并检查角色附带的策略。

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

您不需要编写任何代码 - 除非您要应用一些完全不同的身份验证逻辑 - 这可以通过 "API Gateway Custom Authorizer"

实现

对于 Cognito 用户池 + API 网关 + API 网关自定义授权方 + Cognito 用户池访问令牌

您应该创建 Cognito 授权器(在创建自定义授权器时作为一个选项提供)和 link 您的用户池和身份池,然后客户端需要将 idToken(使用用户池 SDK 生成)发送到访问端点。此 idToken 将通过 Cognito 授权器(在授权方法下拉列表中使用)由 Cognito 身份池验证。

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