如何在AWS lambda中获得验证Cognito访问令牌以允许Gateway API调用



我要做的是设置通往我的lambda函数的API网关,该函数保存在DynamoDB中(或其他我只想登录用户的东西)。但是我不明白如何验证访问权限以及如何从中获取用户。

我在AWS论坛上找到了这篇文章,我决定尝试方法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());
....

和他的访问。我还在我的API调用中设置了自定义API网关自定义授权器。

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

API-GATEWAY

您不需要API Gateway自定义授权器...只是为了验证API终点 - foto ando toce unts uts unts请求,然后选择AWS_IAM进行授权下拉。。

当访问令牌发送到此终点时 - 它将自动检查访问令牌角色(与Cognito Service进行沟通后)并检查带有该角色的策略。

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

您不需要编写任何代码 - 除非您有一些完全不同的验证逻辑要应用 - 可以通过" API Gateway自定义授权器"来实现

for cognito用户池 API网关 API网关自定义授权器 cognito用户池访问令牌

您应该创建Cognito授权器(创建自定义授权器时作为选项可用),然后链接您的用户池&身份池,然后客户需要发送iDtoken(使用用户池SDK生成)以访问端点。这种iDtoken将通过Coginito授权者Cognito Identity池进行验证(在授权方法下拉列表中使用)。

可以使用另一个lambda 端点(例如登录端点)来完成SDK生成的IDTOKEN,也可以使用Cognito Mobile SDK生成。

您可以使用NPM软件包AWS-JWT-Verify进行相同的

参考:https://github.com/awslabs/aws-jwt-verify

import { CognitoJwtVerifier } from "aws-jwt-verify";
// Verifier that expects valid access tokens:
const verifier = CognitoJwtVerifier.create({
  userPoolId: "<user_pool_id>",
  tokenUse: "access",
  clientId: "<client_id>",
});
try {
  const payload = await verifier.verify(
    "eyJraWQeyJhdF9oYXNoIjoidk..." // the JWT as string
  );
  console.log("Token is valid. Payload:", payload);
} catch {
  console.log("Token not valid!");
}

相关内容

  • 没有找到相关文章

最新更新