在代理到另一個後端之前檢查一個後端的回應

在代理到另一個後端之前檢查一個後端的回應

我在 Nginx 前端後面的兩個位置有兩個後端。後端A透過OAuth實現身份驗證。後端B沒有。

我認為為位置 B 添加身份驗證的一種懶惰方法是首先將每個請求發送到後端 A。我想到的流程:

request for /b/kitten.png --> [ nginx ]
                              [ nginx ] --> request for /index.html --> [backend A]
                            if A responds 200:
                              [ nginx ] --> request for /kitten.png --> [backend B]
                            otherwise return what A returned (redirect to OAuth)

這在 Nginx 中可能嗎?如果沒有,也許在 OpenResty/HAProxy/Traefik 中?

答案1

不是完整的答案,但評論有點太長:

您所描述的設定在概念上類似於相當常見的策略:

  • 將身份驗證卸載到一個系統
  • 使用反向代理強制只有經過身份驗證的用戶端才能存取您的其他應用程式/後端(透過檢查請求)
  • 未經身份驗證的用戶端會被反向代理拒絕(和/或理想情況下從身份驗證提供者重定向到登入頁面,一旦成功通過身份驗證,就會重定向回應用程式)
  • 經過身份驗證的客戶端被授予存取權限。

這需要一種方法來驗證客戶端在反向代理中提交的標頭/cookie/會話令牌。優點當然是反向代理公開的應用程式不必提供自己的登入/身份驗證方法。

對於 nginx 來說,一些 lua 程式碼似乎是創建這種方法的常用方法。

例如 access_by_lua方法通常用於與 nginx 和 keycloak 作為身份驗證提供者進行整合。請參閱範例:這裡這裡

相關內容