我创建了一些Lambda函数并使用SAM部署它们。部署成功,但尝试访问端点时,我总是得到
“最初的回答”
{ message: "Unauthorized" }
即使我使用
Authentication
头正确发送了Bearer令牌,但当我从前端应用程序或REST客户端应用程序向端点发出请求时,我会收到未经授权的消息,并检查CloudWatch,没有执行授权函数。此外,从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控制台获得的截图。
最初的回答。