我想离线使用AWS SAM JWT httpi Auth
基于这个AWS示例,我决定创建以下YAML文件:AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs10.x
Events:
ExplicitApi: # warning: creates a public endpoint
Type: HttpApi
Properties:
ApiId: !Ref HttpApi
Method: GET
Path: /path
TimeoutInMillis: 15000
PayloadFormatVersion: "2.0"
RouteSettings:
ThrottlingBurstLimit: 600
HttpApi:
Type: AWS::Serverless::HttpApi
Properties:
FailOnWarnings: True
Auth:
Authorizers:
MyOauthAuthorizer:
IdentitySource: $request.header.Authorization
JwtConfiguration:
audience:
- audience
issuer: issuer-url
DefaultAuthorizer: MyOauthAuthorizer
使用基于docs的AWS::Serverless: httpi创建了一个Amazon API网关HTTP API,支持基于JWT的认证。
我以
开头sam local start-api
然而,当我用Postman查询它时,无论是否使用JWT Bearer令牌,请求都成功。
并且AWS查询不包含单个经过身份验证的用户对象。
在调试模式下运行它也不会提供任何有用的附加信息。
let response;
exports.lambdaHandler = async (event, context) => {
try {
// const ret = await axios(url);
response = {
statusCode: 200,
body: JSON.stringify({
message: "hello world",
event,
context,
// location: ret.data.trim()
}),
};
} catch (err) {
console.log(err);
return err;
}
return response;
};
我的期望是AWS SAM CLI将基于正确提供的发行者URL将承载令牌转换为我可以在以后的操作中使用的标识值。
AWS SAM Local在本地运行时不支持这个吗?
遗憾的是,SAM Local不支持授权器。在AWS SAM的GitHub存储库中有一个添加此功能的功能请求,请参阅https://github.com/aws/aws-sam-cli/issues/137