我的WEB API托管在Docker中。我的Angular客户机将发送一个JWT令牌来访问这些API中的任何一个。我想利用AWS API网关特性在调用请求的API客户端之前添加一个授权检查。从文档中,我看到我们可以利用Lambda授权器的概念来实现这一点。但我又想了一下为什么要使用Lambda Authorizer,因为我可以想出一个可以验证用户的DOT NET CORE API。
我看到这是回应应该/可能的样子。在我的情况下,这应该如何解释
{
"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"
}
如果您正在使用Lambda授权程序,则需要返回允许
或拒绝
策略。
这实质上授予API网关调用底层目标的权限。我知道乍听起来很奇怪,但这就是它的工作原理。将allow
策略视为true
返回语句(凭据匹配),而deny
策略则更多地视为false
返回语句(凭据不匹配/根据您的规则没有足够的权限,等等)。
为了让您开始工作,您可以简单地复制/粘贴文档中可用的代码,并根据自己的喜好修改身份验证方式(文档显示了一个使用allow
或deny
值的头的示例,这肯定不是您想要的,这只是为了示例而已)。
那么,通过列举所有的答案,回到你的问题:
允许
或拒绝
策略。允许
策略响应,那么它将调用目标(可以是Lambda函数、SNS主题、HTTPendpoint--这很可能是您的情况--等等)。授权者将只是充当拦截者,并决定是否将调用代理给目标。null
我试图让我的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