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