簡體   English   中英

微服務到微服務安全通信

[英]Microservices to microservices communication securely

我想在不同的微服務之間進行通信,但出現的問題是微服務使用 jwt 令牌進行保護,我無法找到一種方法從第一個微服務向另一個微服務發送安全調用。 有沒有一種方法可以直接與服務方法通信,因為如果我打開我的 api,它將被濫用。

或者我必須通過 api 網關通過 api 網關發送每個請求並從那里進行安全通信。

這一切都取決於您的項目的確切要求是什么。

網關 API 通常用於向外部用戶隱藏微服務的復雜性,這些用戶通常有 1 個端點可以與之通信。

網關還可以處理安全性和驗證用戶(許多公司確實這樣做)。

現在,當您通過網關並且經過身份驗證的請求到達客戶端時,通常您已經在請求中擁有了用戶身份(網關放置在請求上的內容)。

所以你知道用戶“John Smith”觸發了請求。

現在,如果您需要調用另一個微服務,您應該做出決定(再次由您決定):

  1. 您是否需要在那里進行身份驗證(也許不必在微服務之間保護內部通信(

  2. 如果您確實需要在微服務之間進行身份驗證,誰來對請求進行身份驗證? 如果是網關,則所有身份驗證邏輯都在那里,但是您必須為每個請求進行額外的跳躍,這可能會很昂貴 或者如果是直接調用,則每個微服務都必須實現身份驗證邏輯。 當然,有像 spring security 這樣的東西,其他語言/生態系統也有類似的解決方案,但總的來說這可能很難實現。

  3. 如果您確實從微服務 A 到微服務 B 進行了經過身份驗證的調用,並且該流是由觸發對服務 A 的請求的用戶 John Smith 發起的,則您應該確定調用的語義是否為:

    • 用戶“John Smith”聯系服務 B,或...
    • 服務 A 代表用戶 John Smith 聯系服務 B。 如果您有任何類型的權限系統,這對於授權非常重要。
  4. 在技​​術實現方面,通常您可以使用所需的令牌向請求添加 JWT 標頭。 如果請求已經過身份驗證並且您需要生成用戶身份,則只需在請求中放置幾個​​標頭即可。

你可以有兩個api網關:

  • 一個暴露在外面
  • 另一個用於容器內的微服務通信。

暴露在外面的那個會驗證令牌並將聲明發送到微服務,這些聲明用於驗證路由保護。

在微服務通信之間,使用第二個網關發送您已經擁有的聲明。 希望這可以幫助。 如果您找到任何替代方法,請告訴我們。

暫無
暫無

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

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