[英]Securing REST microservices with Spring Security
我正在尋找一種最佳實踐和高效的解決方案來保護通過 REST 與 Web 客戶端應用程序通信的多個微服務。
當前設置:
這些微服務是用 Java 制作的,使用 Spring 框架並運行到 Docker 容器中。
客戶端是一個 Angular 2 應用程序。
我創建了一個新的 µService,它將充當“網關”,並且是我的 Web 客戶端和我的其他服務之間的唯一通信點。
我從遠程身份驗證 API 檢索 JWT 加密令牌(我們稱之為 LOCK)
我正在考慮的解決方案:
我可以將登錄 JWT 存儲到 cookie 中,然后將其發送到網關。
網關將令牌嵌入到發送給相關 µService 的最終有效載荷中,並將用戶(如果用戶是新用戶)存儲到數據庫中。
然后微服務獲取查詢,在遠程身份驗證服務中檢查用戶角色,如果足夠,則返回 200 狀態和結果。
編輯
我們需要在 µServices hive 中安裝一個 RabbitMQ Broker,從而使用 WebSockets。 為了以與保護 REST API 相同的方式保護 WebSockets,我不確定我們是否仍然應該在網關中管理安全性,或者在微服務級別單獨管理它。 因為會傳輸大量消息,我們也許應該擺脫會減慢傳輸速度的中間件。
問題:
這是一個好習慣嗎? 什么可以做得更好? 你有什么例子可以滿足相同的需求嗎? 非常感謝您的分享和想法。
我建議你看看Dave Sayer關於這個主題的精彩網絡研討會。 他建議了幾種可能的選擇,從Spring會話到OAuth2。
您可以在此處找到網絡研討會: https : //spring.io/blog/2014/11/07/webinar-replay-security-for-microservices-with-spring-and-oauth2
還有一個代碼示例的教程,但我現在找不到它。
我會通過以下方式做到這一點:
考慮到每個微服務都在 apigateway 后面,即使是身份驗證/授權微服務 -> 讓我們簡單地稱之為auth
。
一旦請求到來,apigateway 就會檢查 auth 服務,auth 服務會做它需要的事情來驗證令牌和請求者是否合法,並用 200/401(/403) 響應 apigateway。
如果 apigw 得到 200,它會將請求轉發到該端點上的任何微服務,否則返回其他狀態。
如果我們考慮這種情況,並且它是通過 apigateway 進入您環境的唯一入口點,我認為您沒有任何理由保護其他服務之間的通信。
讓我們考慮這個場景:
client -> calls POST /api/v1/cars
https://..../api/v1/cars
CarsMicroservice
subject
字段,即用戶的uuid,我們需要一個用戶名->汽車關聯當請求到達carsMicroservice時,它會對payload進行DECODE
,獲取用戶uid,要求userMicroservice返回該用戶的所有信息。 這種通信不需要是安全的,因為它是在所有必要的安全檢查之后在內部完成的。當然,您可以強制執行此操作,即用戶可以訪問的唯一用戶信息是他自己的等,但這些是自定義啟發式的。
此外,您可能必須在微服務之間建立信任。 您可以使用以下組合:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.