簡體   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