2017-08-18 9 views
0

私はマイクロサービスアーキテクチャのアプリケーションを持っています。私はどこCompanyService、OrderServiceとTransactionSeviceを持っています。ユーザーはログインして、彼の会社のすべての注文を読み込むことができます。したがって、注文にはCompanyIdがあります。次に、その注文のすべてのトランザクションをロードするので、トランザクションにOrderIdがあります。私はいくつかのセキュリティ思考を通過しています。自分の会社に属する注文の取引だけをユーザーがロードまたは保存することを確認するにはどうすればよいですか。私は、TransactionServiceがCompany(CompanyId)について知る必要がないはずであることを意味します。それは私が貯蓄する直前にチェックしなければならないものですか?たとえば、オーダーIDが会社に属しているかどうか、または他のパターンがあるかどうかを確認します。マイクロサービスアーキテクチャの明確化

おかげ

+1

これは、機能をマイクロサービスに分割することが適切でない完璧な使用例のようです。実際には、すべてのデータが実際に同じデータベースからロードされている場合はそうです。スプリット*がなんらかの意味を持ち、必要であれば、(トークンベースのインフラストラクチャを介して)ユーザーを認証する方法と、個々のレコードへのアクセスを確認する方法が必要であるようです。他のサービスに頼っている。後者は、自然界の関係を悪用することができなければ、特に厄介なものになります。 –

+0

2番目の@ JeroenMostertのコメントでは、他のサービス(およびそれらのサービスのデータ)が利用できない間にジョブを実行することができる場合にのみ、物事を別々のサービスに分割する必要があります。実用的でない場合は、分割しないでください。 –

+0

あなたはどちらも正しいですが、マイクロサービスの道を辿ると、DBモデルを分解してFKでリレーすることができなくなるため、常にこの種の問題が発生します。それ以外の場合は、常に大きなモノリシックデータベースを使い続けることになります。私は現在、Azure AD B2Cを実装しています。この方法で、ユーザーにカスタム属性を追加し、マイクロサービス内の情報も取得できます。 – Matteo

答えて

1

私の考え:あなたの最初のmicroserviceはそれで

GetOrders(int userId) 

になるだろう

あなたはuserIdをで引っ張るために会社のためのチェックを行う必要があり

あなた2番目の通話は

GetTransactions(int orderId) 

したいどのくらいのセキュリティに応じて、あなたも行うことができます。

GetTransactions(int orderId, int userId) 

呼び出しを行うユーザーはAPI乱用の場合の正しい会社に属していることを確認してください背中に。だから、基本的には、はい、ユーザーは、トランザクションを取得している会社に属していることを確認する必要があります。

+0

私に戻ってくれてありがとう。それはまさに私が心に留めていたものでした。だから私はそれほど遠くないと思う。 Thankss – Matteo