我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得
{ message: "Unauthorized" }
即使我使用authentication
头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorizer函数。
此外,检查Lambda配置中的Authorizer函数,我可以看到API Gateway Trigger
中有一个错误,但不知道这是什么意思。
我使用AWS提供的指南创建了authorizer函数:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html#api-gateway-lambda-authorizer-lambda-function-create
共享SAM配置
Resources:
SomeAPI:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
TracingEnabled: true
Auth:
DefaultAuthorizer: MyLambdaTokenAuthorizer
Authorizers:
MyLambdaTokenAuthorizer:
FunctionArn: !GetAtt AuthorizerFunction.Arn
GetActivityStreamFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: get-activity-stream/
Handler: index.handler
Layers:
- !Ref DepencenciesLayer
- !Ref DatabaseLayer
Events:
GetActivityStream:
Type: Api
Properties:
RestApiId: !Ref SomeAPI
Path: /activity-stream
Method: get
## Authorizer Function
AuthorizerFunction:
Type: AWS::Serverless::Function
Properties:
Layers:
- !Ref DepencenciesLayer
CodeUri: authorizer/
Handler: index.handler
对于授权者发回的响应,它发送API网关请求的所有参数
{
principalId: decoded.sub,
policyDocument: getPolicyDocument("Allow", params.methodArn),
context: { scope: decoded.scope }
}
我使用的运行时是nodejs12.x
,下面是我从AWS控制台获得的一些屏幕截图。
在对互联网上发现的不同内容进行了数小时的测试后,当我注意到政策文件是错误的时,我开始有了改进:
之前
const policyDocument = {
"Version": "2012-10-17",
"Statement": [
{
"Effect": effect,
"Action": "execute-api:Invoke",
"Resource": resource
}
]
};
之后
const policyDocument = {
"Version": "2012-10-17",
"Statement": [
{
"Effect": effect,
"Action": [
"execute-api:Invoke"
],
"Resource": [
resource
]
}
]
};
Resources:
SomeAPI:
Type: AWS::Serverless::Api
Auth:
DefaultAuthorizer: MyLambdaTokenAuthorizer
AddDefaultAuthorizerToCorsPreflight: false
Authorizers:
MyLambdaTokenAuthorizer:
FunctionArn: !GetAtt AuthorizerFunction.Arn
Identity:
Header: Authorization
ValidationExpression: Bearer.*
首先,我对AWS很陌生。从非常基本的API网关+Lambda集成开始。下面是我的用例。 > 与API网关创建了一个Lambda代理集成请求,GET请求输出通过查询参数传递的2个数字的相加。现在,如果我访问这个API网关endpoint,我将获得所需的结果。 现在我已经创建了自定义授权器,它反过来是对另一个lambda的调用。因此请求将在到达API网关endpoint之前由授权者lambda验证。在
我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API
我正在尝试使用aws api网关授权器和cognito用户池。当我使用aws api网关控制台进行测试时,它工作得很好。 但当我尝试在api中启用授权时,它显示请查看下面的屏幕截图 有人能帮忙吗。
我是API网关的新手。我尝试使用“自定义授权程序”。我遵循了下面的文档,并使用了网站提供的示例代码。https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html “令牌类型的lambda授权者”是工作的。 但是... 我对“请求类型”感到困惑,不知道如何将quer
我正在尝试将AWSAPI网关授权器与cognito用户池一起使用。当我使用AWSAPI网关控制台进行测试时,它运行良好。 但当我尝试在api中启用授权时,它会显示请查看下面的屏幕截图 有人能帮忙吗? 仅供参考,我已经按照这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-wi
我已经创建了一个Lambda函数,在我的一个APIendpoint的方法请求上,我将其配置为“自定义身份验证”。当我使用AWS API网关的“test”函数时,我在日志输出中没有看到Lambda函数的任何输出。 我已经部署了API。 然而,有些事情正在发生,因为当我使用配置的自定义域名命中apiendpoint时,我得到了 但是,如果我从该endpoint删除“自定义身份验证”并点击同一endpo