AWS SAM CLI Python授权中间件

2024-06-01 03:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发我的第一个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中间件当涉及到这类事情时,我想知道我们如何在这里做类似的事情。 有什么建议吗


Tags: lambdaautheventjson处理程序returnnotbody
1条回答
网友
1楼 · 发布于 2024-06-01 03:03:17

有两种方法可以实现这一点

第一个选项对我们来说是API Gateway Lambda authorizer。但这需要使用API网关。有一些事情可以开箱即用,或者您可以提供自定义授权器Lambda,您必须自己构建。这个Lambda可以执行任何您想要授权传入请求的操作。这实际上与Django中间件相同

第二个选项是Lambda Layers。您可以使用这些函数在Lambda函数之间共享公共代码。您可以使用上面的代码创建一个包含授权方法的Lambda层,然后将该层附加到所有需要该层的Lambda。也许是这个

就我个人而言,我认为API授权人是更好的生产选择。我们经常使用它们。但它们增加了复杂性和成本。Lambda层可能适合较小的项目

相关问题 更多 >