2017-08-18 237 views
0

我有一個微服務架構應用程序。我有一個CompanyService,一個OrderService和一個TransactionSevice。用戶登錄後,他可以加載公司的所有訂單。所以訂單有一個CompanyId。然後它加載該訂單的所有交易,因此該交易具有OrderId。我正在經歷一些安全思想。我如何確保用戶只加載或保存屬於他公司的訂單的交易。我的意思是TransactionService不需要了解公司(CompanyId)。這是我應該保存之前檢查的東西嗎?例如檢查orderid是否屬於公司或存在其他模式?微服務架構澄清

感謝

+1

這聽起來像是一個完美的用例,將功能分解爲微服務並不合適。因此,如果所有數據實際上都是從同一個數據庫加載的話。如果我們暫時認爲split *有某種意義或必要性,那麼顯然服務需要一種方法來驗證用戶(可能通過某種基於令牌的基礎架構)以及驗證個人記錄訪問的方式依靠其他服務。如果你不能利用自然關係,後者尤其會變得非常尷尬。 –

+0

對於第二@ JeroenMostert的評論,如果在其他服務(以及這些服務的數據)不可用的情況下,他們可以執行他們的工作,那麼您應該只將事情分解爲單獨的服務(微或不)。如果這不切實際,不要分割它們。 –

+0

你們都是對的,但是,沿着微服務的道路,你總是會因爲打破了DB模型而無法在FK上進行中繼,所以總是會出現這種問題。否則,你將永遠被困在一個龐大的單一數據庫中。我現在正在實現Azure AD B2C,這樣我就可以向用戶添加自定義屬性並在微服務中檢索其信息。 – Matteo

回答

1

我的想法:

您的第一個微服務將是

GetOrders(int userId) 

在這裏面,你需要做的檢查爲這家公司的用戶id

拉你第二個電話將是

GetTransactions(int orderId) 

取決於你要多少安全,你也可以這樣做:

GetTransactions(int orderId, int userId) 

要備份檢查進行呼叫的用戶屬於正確的公司API濫用的情況。所以基本上,是的,你必須檢查用戶是否屬於他們正在交易的公司。

+0

謝謝你回到我身邊。這正是我想到的。所以我想我的設計並沒有那麼遙遠。 Thankss – Matteo