AWS SAM CLI-Python-授权中间件
我正在开发我的第一个AWS无服务器Python应用程序,我需要一个在实际进入lambda处理程序之前处理和检查一些HTTP请求头的程序 这可以概括为以下内容(初步验证步骤): 但我不想对每个lambda处理程序重复(复制和粘贴)。 来自Django的背景,我习惯于Django中间件当涉及到这类事情时,我想知道我们如何在这里做类似的事情。AWS SAM CLI-Python-授权中间件,python,aws-lambda,boto3,aws-sam-cli,Python,Aws Lambda,Boto3,Aws Sam Cli,我正在开发我的第一个AWS无服务器Python应用程序,我需要一个在实际进入lambda处理程序之前处理和检查一些HTTP请求头的程序 这可以概括为以下内容(初步验证步骤): 但我不想对每个lambda处理程序重复(复制和粘贴)。 来自Django的背景,我习惯于Django中间件当涉及到这类事情时,我想知道我们如何在这里做类似的事情。 有什么建议吗?实现这一点有两种方法 第一个选择对我们来说是一个选择。但这需要使用API网关。有一些事情可以开箱即用,或者您可以提供自定义授权器Lambda,您必
有什么建议吗?实现这一点有两种方法 第一个选择对我们来说是一个选择。但这需要使用API网关。有一些事情可以开箱即用,或者您可以提供自定义授权器Lambda,您必须自己构建。这个Lambda可以执行任何您想要授权传入请求的操作。这实际上与Django中间件相同 第二个选项是。您可以使用这些函数在Lambda函数之间共享公共代码。您可以使用上面的代码创建一个包含授权方法的Lambda层,然后将该层附加到所有需要该层的Lambda。也许是这个 就我个人而言,我认为API授权人是更好的生产选择。我们经常使用它们。但它们增加了复杂性和成本。Lambda层可能适合较小的项目
def handler(event, context):
# preliminary auth steps - start
auth_header = event["headers"].get("Authorization")
if any([not auth_header, not is_auth_header_value_valid(auth_header)]):
return {
'statusCode': 401,
'body': json.dumps("Unauthorized access"),
'headers': {
'Content-Type': 'application/json',
},
}
# preliminary auth steps - end
try:
rsp = do_stuff()
status_code = 200
except Exception as e:
rsp = str(e)
status_code = 500
data = {
'statusCode': 200,
'body': json.dumps(rsp),
'headers': {
'Content-Type': 'application/json',
},
}
return data