web-dev-qa-db-ja.com

マイクロサービス認証戦略

マイクロサービスアーキテクチャに適切で安全な認証戦略を選択するのに苦労しています。トピックで見つけた唯一のSO投稿は次のとおりです。 Microservice Architectureでのシングルサインオン

ここでの私の考えは、各サービス(認証、メッセージング、通知、プロファイルなど)に各ユーザーへの一意の参照(論理的にはuser_id)と、ログインしている場合は現在のユーザーのidを取得する可能性があることです。

私の研究から、次の2つの戦略が考えられます。

1.共有アーキテクチャ

Shared architecture

この戦略では、認証アプリは他のサービスの1つです。ただし、各サービスはsession_id => user_idに変換できる必要があるため、非常にシンプルでなければなりません。だから私はRedisを考えました。それはkey:value session_id:user_idを保存するでしょう。

2.ファイアウォールアーキテクチャ

Firewall architecture

この戦略では、セッションストレージは認証アプリによってのみ処理されるため、実際には重要ではありません。その後、user_idを他のサービスに転送できます。私はRails + Devise(+ Redisまたはmem-cached、またはCookieストレージなど)を考えましたが、可能性はたくさんあります。重要なことは、サービスXがユーザーを認証する必要がないことです。


これら2つのソリューションは、次の点でどのように比較されますか?

  • 保安
  • 堅牢性
  • 拡張性
  • 使いやすさ

それとも、ここで言及していない別の解決策を提案するでしょうか?

私はソリューション1の方が好きですが、正しい方向に進んでいるという事実で私を保護するデフォルトの実装をあまり見つけていません。

私の質問が閉じられないことを願っています。他にどこに尋ねればいいのか本当に分かりません。

前もって感謝します

113

私が理解していることに基づいて、それを解決する良い方法は、OAuth 2プロトコルを使用することです(それについての詳細は http ://oauth.net/2/

ユーザーがアプリケーションにログインすると、トークンを取得し、このトークンを使用して他のサービスに送信して、リクエストでそれらを識別することができます。

OAuth 2 Model

連鎖マイクロサービス設計の例 Architecture Model

リソース:

55
Tiarê Balbi

OpenID Connectを使用してこれを実装するには、APIゲートウェイパターンを使用する必要があります。ユーザーはIDPによって認証され、承認サーバーからJWTトークンを取得します。これで、APIゲートウェイシステムはこのトークンをRedisデータベースに保存し、ブラウザーでCookieを設定できます。 APIゲートウェイはCookieを使用してユーザーリクエストを検証し、トークンをMicroservicesに送信します。

API Gatewayは、パブリックJavaスクリプトクライアントアプリ、従来のWebアプリ、ネイティブモバイルアプリ、およびマイクロサービスアーキテクチャのサードパーティクライアントアプリなど、あらゆる種類のクライアントアプリの単一のエントリポイントとして機能します。

詳細については http://proficientblog.com/microservices-security/ をご覧ください。

0
ManishSingh

idenitty server 4 を使用して認証と承認を行うことができます

Firewall Architectureを使用する必要があるため、セキュリティ、堅牢性、スケーラビリティ、および使いやすさをさらに制御できます

0
Vijay Parmar

簡単な答え:Oauth2.0種類のトークンベースの認証を使用します。これは、webappやモバイルアプリなど、あらゆる種類のアプリケーションで使用できます。 Webアプリケーションに関係する一連のステップは、

  1. iDプロバイダーに対して認証する
  2. cookieにアクセストークンを保持する
  3. webappのページにアクセスします
  4. サービスを呼び出す

以下の図は、必要なコンポーネントを示しています。 Web APIとデータAPIを分離するこのようなアーキテクチャは、優れたスケーラビリティ、復元力、安定性を提供します

enter image description here

0
Sandeep Nair