前景
モノリシックプラットフォームからよりサービス指向のアーキテクチャに移行しています。非常に基本的なDDD原則を適用し、さまざまな境界コンテキストにドメインを分割しています。各ドメインは分散され、Web API(REST)を介してサービスを公開します。
ビジネスの性質上、Bookings、Services、お客様、製品など.
Identity Server(Thinktecture Identity Server 3に基づく)もセットアップしました。その主な役割は次のとおりです。
また、サービスへの外部アクセスを一元化するAPI Gatewayの役割も紹介しました。 API Gatewayは、次のような内部ドメインの深い知識を必要としない機能を提供します。
認証
承認に関係するものは、これはAPI Gatewayではなく、内部サービス自体で管理されます。現在、次の2つのタイプの承認を行っています。
内部サービスで承認を処理できるようにするために、API Gatewayは、クライアント(要求を実行するアプリケーション)と顧客に関する両方の情報を含むトークンを(内部サービスに要求をルーティングするときに)転送します。人がクライアントアプリケーションにログインしている場合)。
問題の説明
これまでのところ、サービス間通信を導入するまでは良好です(一部のサービスは他のサービスと通信してデータを取得できます)。
質問
サービス間通信の認可にどのように取り組むべきですか?
考慮されるオプション
さまざまなオプションについて説明するために、次のサンプルシナリオを使用します。
この問題について内部で話し合うと、いくつかのオプションがポップアップしましたが、どのオプションが最適かはわかりません。
ご協力いただき、ありがとうございます。
内部マイクロサービス間の通信チャネルを用意することをお勧めします。
たとえば、いくつかのRabbitMQのようなメッセージブローカーの内部からsend/receiveまたはpublish/subscribeを使用して、マイクロサービス間のメッセージを送信します。
次に、最初のエンドユーザー向けサービス「この例では予約サービス」がトークンの検証を担当し、IdentityServerと通信することによって、この特定の操作を行うことを顧客に許可します。
次に、メッセージブローカーを介してサービスサービスと通信します。その場合、トークンを再度検証する必要はありません。
このモデルはシンプルになり、パフォーマンスが向上すると思います。