簡體   English   中英

API網關+登錄微服務+redis

[英]API gateway + Login microservice + redis

我正在開發一個 web 應用程序,我正在嘗試設計和實現微服務架構。 我已經閱讀了很多關於身份驗證和授權的文章,我想知道我的設計是否走在正確的軌道上。

我有一個 API 網關,用於管理前端應用程序和后端服務之間的所有通信流。 在網關后面,我有兩個微服務,分別稱為身份提供者和前端微服務。 身份提供者管理諸如登錄、注冊和交付訪問令牌之類的事情。 前端微服務包含一個 angular 應用程序。 因此,在正常流程中,用戶將向身份提供者進行身份驗證,身份提供者依次打開存儲在 redis 中的登錄名 session,並將 session id 作為 cookie 返回。 身份提供者將用戶重定向到前端服務,該服務檢查存儲在 redis 中的登錄狀態,並且僅在通過身份驗證后返回 angular 應用程序。

所以,我沒有使用 OAuth,因為我認為此時此刻我真的不需要它。 此外,我不在網關級別管理身份驗證。 為登錄和 redis 存儲 session 的微服務是否是一種好方法,以便所有其他微服務可以在需要時對用戶進行身份驗證? 我看到很多在網關級別實現身份驗證的示例,那么委托微服務來對用戶進行身份驗證是不是一種糟糕的方法? 在某種程度上,網關僅用作路由器。 你怎么看待這件事?

將用戶 session 存儲在 Redis 上並不是一個壞習慣,但是使用 Redis 進行授權/認證可能會導致安全問題。 在理想的微服務架構中,服務需要盡可能無狀態。 通過將授權作業授予 redis,您將創建一個額外的層,您需要在每個請求上對其進行管理。 當用戶信息發生變化時會發生什么? 您還需要更新 redis,當它與授權服務器不同步時,問題就會開始出現。 在網關后面使用單獨的授權服務器也不是壞習慣。

當你使用 API-GATEWAY 時,你必須記住,在微服務架構中,我們必須處理 Api-Gateway 中的橫切關注點。意味着,一旦你將一些功能(如安全性日志記錄用戶跟蹤)放在一個地方來執行整個應用程序區域,當你想改變它們時,你改變一個地方而不是整個微服務,.,.所以,你可以使用 oauth2 和 spring 雲網關或 zull 作為 oauth2 客戶端並使用 Oauth2 提供者。成功登錄后,網關執行 TokenRelay (從請求中刪除 cookie 並將其替換為 jwt 令牌並將其發送到您的微服務)。現在您可以將Redis用作網關中的HttpSession管理。此外,通過這種方法,您還可以使用服務的多個實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM