在 AWS 的 API gateway 上就有一個項目(Authorizer)是支援 Cognito 以及客制認證的方法,好處就是在進我們寫的 API 之前有個可以做身份確認的 Lambda Function 幫我們好前處理,而本篇則會介紹如何在 Serverless framework 上設定 API gateway 的 Authorizer 以及成功讓 API 回應,串接 Cognito 做使用部分就留給之後吧!

**👉 本篇的範例全都在 **GitHub

API Gateway - Authorizer

擁有 Authorizer 的一個 Serverless 服務會長這樣:

User Request - [Authorizer] - API - Response user

好處除了前言所提到的前處理外,還有如果設定是 Edge 模式 (不是透過 region 從網路層傳) 的話其實在認證完後傳到 API 時速度是很快的。

以下就開始好好的介紹它 😆

實際的位置

如果在這邊設定覺得不知道在哪邊的話可以參考 - 純手動用法官方教學

中文的話左邊名為授權方,英文則是Authorizer

API Gateway Authorizer

Serverless 實作

Yaml settings

原始如果串接 python WSGI 的話設定檔應該會長得如下:

functions:
  api:
    handler: wsgi_handler.handler
    events:
      - http: ANY /
      - http: ANY {proxy+}

設定 Authorizer Lambda function,先在跟 api 同層加上 Authorizer Lambda,指定 handler 為 handler 資料夾下的 authorizer.py 的 auth_handler function,並且設定 cors 為 true,避免呼叫 api 時被 AWS 擋下來無法使用。

接著在把 events 裡的兩個事件加上 authorizer 的 Function,名為 ResourceAuthorizer,改編過後入下:

functions:
  api:
    handler: wsgi_handler.handler
    events:
      - http:
          path: /
          method: ANY
          authorizer: ResourceAuthorizer
      - http:
          path: /{proxy+}
          method: ANY
          authorizer: ResourceAuthorizer
  ResourceAuthorizer:
    handler: handler/authorizer.auth_handler
    cors: true

#[object object] #serverless #function

【AWS】使用 API Gateway Authorizer 做使用者驗證 feat. Serverless
3.05 GEEK