当前位置: 首页 > 知识库问答 >
问题:

在API网关中使用AWS Lambda授权器

殳毅
2023-03-14

我的WEB API托管在Docker中。我的Angular客户机将发送一个JWT令牌来访问这些API中的任何一个。我想利用AWS API网关特性在调用请求的API客户端之前添加一个授权检查。从文档中,我看到我们可以利用Lambda授权器的概念来实现这一点。但我又想了一下为什么要使用Lambda Authorizer,因为我可以想出一个可以验证用户的DOT NET CORE API。

  1. 我的Lambda网关对我的情况有意义吗?
  2. 如果是,那么lambda授权程序的输出是什么?一个简单的true/false,表示令牌是否有效?

我看到这是回应应该/可能的样子。在我的情况下,这应该如何解释

{
              "policyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                  {
                    "Action": "execute-api:Invoke",
                    "Resource": [
                      "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*"
                    ],
                    "Effect": "Allow"
                  }
                ]
              },
              "principalId": "Foo"
            }

共有1个答案

杜英叡
2023-03-14

如果您正在使用Lambda授权程序,则需要返回允许拒绝策略。

这实质上授予API网关调用底层目标的权限。我知道乍听起来很奇怪,但这就是它的工作原理。将allow策略视为true返回语句(凭据匹配),而deny策略则更多地视为false返回语句(凭据不匹配/根据您的规则没有足够的权限,等等)。

为了让您开始工作,您可以简单地复制/粘贴文档中可用的代码,并根据自己的喜好修改身份验证方式(文档显示了一个使用allowdeny值的头的示例,这肯定不是您想要的,这只是为了示例而已)。

那么,通过列举所有的答案,回到你的问题:

  1. 是的,但它被称为Lambda授权器,而不是Lambda网关
  2. 对有效/无效令牌分别使用允许拒绝策略。
  3. 如果Lambda授权程序使用允许策略响应,那么它将调用目标(可以是Lambda函数、SNS主题、HTTPendpoint--这很可能是您的情况--等等)。授权者将只是充当拦截者,并决定是否将调用代理给目标。
 类似资料:
  • 我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API

  • 我遵循的方法是,我为每组用户创建一个单独的Cognito用户池。 当用户登录时,他将通过适当的用户池进行身份验证。 为了调用后续的API,我计划使用Lambda Authorizer。 我遇到了下面的链接,以验证ID令牌。 https://github.com/awslabs/aws-support-tools/blob/master/cognito/decode-verify-jwt/decod

  • 我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得 即使我使用头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorize

  • 关于Github webhooks,“对webhook配置的URLendpoint发出的HTTP请求将包含几个特殊的头文件”,包括X-Hub-Signature,它是“有效负载的HMAC十六进制摘要,使用钩子的秘密作为密钥”。https://developer.github.com/webhooks/#payloads 使用AWS API Gateway时,理想情况下,您希望通过生成有效负载的HM