我有下面的CloudFormation堆栈。2个lambda(问候和Auth),API网关配置为使用Auth lambda进行授权。
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Resources:
GreetingsApiGateway:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Auth:
DefaultAuthorizer: MyAuthorizer
Authorizers:
MyAuthorizer:
FunctionArn: !GetAtt AuthLambda.Arn
GreetingsLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: "s3://<bucket-name>/code.zip"
Handler: src/index.greeting
Events:
GetRoot:
Type: Api
Properties:
RestApiId: !Ref GreetingsApiGateway
Path: /hello
Method: get
AuthLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: "s3://<bucket-name>/code.zip"
Handler: src/index.auth
Globals:
Function:
Runtime: nodejs8.10
# check whether I can use resources within globals
Outputs:
ApiURL:
Description: "OUR API URL"
Value: !Sub "https://${GreetingsApiGateway}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
我的lambdas的代码如下:
exports.greeting = async () => ({ statusCode: 200, body: "Hello Beautiful World!" });
exports.auth = async () => ({ statusCode: 200, body: "I wanna do the authorisation!" });
我尝试在GET请求的头中发送此输入。响应为“未经授权”,没有来自Auth lambda CloudWatch日志中的任何日志。
{
"type":"TOKEN",
"authorizationToken":"<caller-supplied-token>",
"methodArn":"arn:aws:execute-api:<regionId>:<accountId>:<apiId>/<stage>/<method>/<resourcePath>"
}
发生什么事了?
为了检索响应,我们需要使用授权头,仍然不明白为什么从API网关控制台的请求检索到响应。
我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得 即使我使用头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorize
我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API
null
我遵循的方法是,我为每组用户创建一个单独的Cognito用户池。 当用户登录时,他将通过适当的用户池进行身份验证。 为了调用后续的API,我计划使用Lambda Authorizer。 我遇到了下面的链接,以验证ID令牌。 https://github.com/awslabs/aws-support-tools/blob/master/cognito/decode-verify-jwt/decod
我的WEB API托管在Docker中。我的Angular客户机将发送一个JWT令牌来访问这些API中的任何一个。我想利用AWS API网关特性在调用请求的API客户端之前添加一个授权检查。从文档中,我看到我们可以利用Lambda授权器的概念来实现这一点。但我又想了一下为什么要使用Lambda Authorizer,因为我可以想出一个可以验证用户的DOT NET CORE API。 我的Lambd