使用 Cognito 通过 AWS Api Gateway 安全性创建新用户 - 如何在创建用户之前允许访问该用户?

Create a new user trough AWS ApiGateway secured with Cognito - how to allow access to the users before it is created?

我在使用 AWS-Cognito 保护的 AWS API 网关中有一个 API。为了使用端点,用户必须被 Cognito 识别,这将 return 一个令牌。

这里的问题与CREATE USER过程有关。为了使用此端点,用户必须存在于 Cognito 中,然后接收令牌并使用它连接到 CREATE USER 端点。但在数据库(api-端点)中创建用户时,该用户未在 Cognito 中创建,并且无权访问 API.

那么,这个过程的最佳方法应该是什么?

您不需要一直使用TOKEN 授权方。 API 网关允许您配置另一种类型的授权方:REQUEST。

在这种情况下,您完全取决于您如何判断某人是否有权(或未被授权)呼叫您的 API 端点。

event 看起来像这样(取自 AWS 文档):

{
  "type": "REQUEST",
  "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "resource": "/request",
  "path": "/request",
  "httpMethod": "GET",
  "headers": {
    "X-AMZ-Date": "20170718T062915Z",
    "Accept": "*/*",
    "HeaderAuth1": "headerValue1",
    "CloudFront-Viewer-Country": "US",
    "CloudFront-Forwarded-Proto": "https",
    "CloudFront-Is-Tablet-Viewer": "false",
    "CloudFront-Is-Mobile-Viewer": "false",
    "User-Agent": "..."
  },
  "queryStringParameters": {
    "QueryString1": "queryValue1"
  },
  "pathParameters": {},
  "stageVariables": {
    "StageVar1": "stageValue1"
  },
  "requestContext": {
    "path": "/request",
    "accountId": "123456789012",
    "resourceId": "05c7jb",
    "stage": "test",
    "requestId": "...",
    "identity": {
      "apiKey": "...",
      "sourceIp": "...",
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "resourcePath": "/request",
    "httpMethod": "GET",
    "apiId": "abcdef123"
  }
}

然后你需要告诉API网关它可以通过这个响应:

{
    "principalId": "any-identifier-you-choose-like-uuid",
    "policyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": "execute-api:Invoke",
                "Effect": "Allow",
                "Resource": "arn:aws:execute-api:eu-west-1:111111111111:abcdef/prod/GET/myresource"
        ]
    }
}

还涉及缓存策略,但这应该足以让您开始。