繁体   English   中英

AWS SAM CLI - Python - 授权中间件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM