57

いくつかのサービス (データを提供する) と Web アプリケーション (HTML を提供する) を持つグリーン フィールド プロジェクトを設計しようとしています。マイクロサービスについて読んだことがありますが、それらはぴったりのようです。

私がまだ抱えている問題は、SSO を実装する方法です。ユーザーが 1 回認証されると、すべての異なるサービスとアプリケーションにアクセスできるようになります。

いくつかのアプローチを考えることができます:

  1. Identity サービスとアプリケーションを追加します。保護されたリソースを持つサービスは、Identity サービスと通信して、資格情報が有効であることを確認します。そうでない場合は、認証のためにユーザーをリダイレクトします。

  2. OpenID などの Web 標準を使用し、各サービスに独自の ID を処理させます。これは、ユーザーが各サービス/アプリケーションを個別に承認する必要があることを意味しますが、その後は SSO になります。

他のアイデアも喜んでお聞きします。特定の PaaS (Heroku など) に独自のソリューションがある場合、それも許容されます。

4

2 に答える 2

47

以前の仕事でマイクロサービス アーキテクチャを実装していたときに、最善のアプローチは 1 番目の「ID サービスを追加し、それを介してサービス アクセスを承認する」に沿ったものであると判断しました。私たちの場合、これはトークンで行われました。リクエストに認証トークンが含まれていた場合、それがサービスとのユーザー セッションでの最初の呼び出しである場合、ID サービスでそのトークンを検証できます。トークンが検証されると、セッションに保存されるため、ユーザーのセッションでの後続の呼び出しでは、追加の呼び出しを行う必要がありませんでした。そのセッションでトークンを更新する必要がある場合は、スケジュールされたジョブを作成することもできます。

この状況では、OAuth 2.0 エンドポイントで認証を行っており、ドメインへの呼び出しのためにトークンが HTTP ヘッダーに追加されました。HTTP ヘッダーからトークンを取得できるように、すべてのサービスがそのドメインからルーティングされました。私たちは皆、同じアプリケーション エコシステムの一部だったので、最初の OAuth 2.0 認証では、ユーザーが自分のアカウントに対して許可を与えるアプリケーション サービスがリストされていました。

このアプローチに追加されたのは、HTTP 要求フィルター チェーンに追加され、サービスへの承認プロセスを処理するプロキシ クライアント ライブラリを ID サービスが提供することでした。このサービスは、ID サービスからプロキシ クライアント ライブラリを使用するように構成されます。Dropwizard を使用していたため、このプロキシは実行中のサービス プロセスにフィルタをブートストラップする Dropwizard モジュールになります。これにより、インターフェイスが大幅に変更されない限り、クライアント側の無料の更新も含まれる ID サービスの更新を、依存するサービスによって簡単に使用できるようになりました。

当社のデプロイ アーキテクチャは、AWS Virtual Private Cloud (VPC) と自社のデータ センターに分散されていました。OAuth 2.0 認証サービスは会社のデータセンターにあり、すべてのアプリケーション サービスは AWS VPC にデプロイされていました。

私たちが取ったアプローチがあなたの決定に役立つことを願っています. 他にご不明な点がございましたら、お問い合わせください。

于 2014-12-04T00:29:53.667 に答える
41

Chris Sterling は上記の標準的な認証方法について説明しましたが、これは完全に理にかなっています。いくつかの実際的な理由から、ここで別の考えを述べたいと思います。

リソースを承認するために、認証サービスと、認証サーバーに依存する他の複数のマイクロ サービスを実装しました。ある時点で、認証サーバーへのラウンド トリップが多すぎるためにパフォーマンスの問題が発生しました。また、マイクロ サービスの数が増えるにつれて、認証サーバーのスケーラビリティの問題も発生しました。あまりにも多くの往復を避けるために、アーキテクチャを少し変更しました。

認証サーバーは資格情報で一度だけ接続され、秘密鍵に基づいてトークンを生成します。対応する公開鍵が各クライアント (マイクロ サービス サーバー) にインストールされ、認証サーバーに接続せずに認証鍵を検証できます。キーには、生成された時刻が含まれ、マイクロ サービスにインストールされたクライアント ユーティリティも有効になります。標準的な実装ではありませんでしたが、特にすべてのマイクロ サービスが内部でホストされている場合、このモデルでかなりの成功を収めています。

于 2014-12-04T04:53:28.960 に答える