[英]AWS SAM CLI - Python - authorization middleware
我正在开发我的第一个 AWS 无服务器 Python 应用程序,我需要一个在实际进入 lambda 处理程序之前处理和检查一些 HTTP 请求标头的东西。
这可以总结为这样的内容(初步身份验证步骤):
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
但我不想为每个 lambda 处理程序重复(复制和粘贴)。 来自 Django 背景,当涉及到这类事情时,我习惯了 django 中间件,我想知道如何在这里做类似的事情。 有什么建议吗?
有两种方法可以实现这一点。
第一个选项是给我们一个API 网关 Lambda 授权方。 但这需要使用 API 网关。 有一些事情可以开箱即用,或者您可以提供自定义授权器 Lambda,您必须自己构建。 这个 Lambda 可以做任何你想做的事情来授权传入的请求。 这实际上与 Django 中间件相同。
第二个选项是Lambda 层。 您可以使用它们在 Lambda 函数之间共享公共代码。 您可以使用上面的代码创建一个包含授权方法的 Lambda 层,然后将此层附加到所有需要它的 Lambda。 也许这篇博客文章有帮助。
就个人而言,我认为 API 授权器是生产的更好选择。 我们经常使用它们。 但它们增加了复杂性和成本。 Lambda 层可能适用于较小的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.