私は明らかにマイクロサービスアーキテクチャについて多くを聞いたことがあり、それは(特にNetflixのサクセスストーリーで)非常に理にかなっていると思います。
小規模なGrailsアプリケーションをマイクロサービスに実装したいと思います(ただし、フレームワークはそれほど重要ではありません)。私の質問は、「セキュリティ」または「ユーザー」マイクロサービスについてです。私の最初の考えは、他のマイクロサービスがセキュリティサービスのRESTインターフェースをクエリする場所であるRESTインターフェースでアプリケーションを作成することです。しかし、セキュリティはすべてのサービスで複製されます。これは避けられない問題のようですが、これを処理するための最良の方法は何ですか?
すべてのサービスにSpring Securityを実装し、単純な権利情報でユーザーサービスにクエリを実行する必要がありますか?または、中央セキュリティサービスが何らかの方法で機能する可能性はありますか?
@ user454322が言うように、OAuth2仕様を調べてください...これは広く使用され、十分にサポートされている標準であり、うまく機能します。
許可サーバーをデプロイするには、(基本的に)2つの方法があります。
1)リバースプロキシとして(@ user454322の図に示すように)。これは、外部からのすべてのリクエストがOAuth2サーバーを経由してサービスに送信されるときです。これにより、承認の問題が一元化されるため、要求がサービスに到達する前に処理されます。これは、ロードバランサーでSSLを終了するのと同じです。本質的に、認証サーバーはファイアウォールやロードバランサーのようなネットワークミドルウェアの一部になります。
2)認可サーバーとして。これは少し異なるレイアウトで、各サービスは(ロードバランサーなどから)直接リクエストを受け取ります。各リクエストには、ヘッダーにアクセストークンが付属しています。次に、サービスは許可サービスに対してHTTP呼び出しを行い、トークンを検証します。認可サーバーは、ユーザーの認証とトークンの付与を最初に担当します。マイクロサービスがその部分を行う必要はありません。
重複を避けて保守性を向上させるために、central Security Serviceを使用します。
画像は千以上の言葉を言っていると言われています:
OAuthはRESTful APIを保護する一般的な方法です。
OAuth記事]をご覧ください。