マイクロサービスアーキテクチャに適切で安全な認証戦略を選択するのに苦労しています。トピックで見つけた唯一のSO投稿は次のとおりです。 Microservice Architectureでのシングルサインオン
ここでの私の考えは、各サービス(認証、メッセージング、通知、プロファイルなど)に各ユーザーへの一意の参照(論理的にはuser_id
)と、ログインしている場合は現在のユーザーのid
を取得する可能性があることです。
私の研究から、次の2つの戦略が考えられます。
この戦略では、認証アプリは他のサービスの1つです。ただし、各サービスはsession_id
=> user_id
に変換できる必要があるため、非常にシンプルでなければなりません。だから私はRedisを考えました。それはkey:value session_id:user_id
を保存するでしょう。
この戦略では、セッションストレージは認証アプリによってのみ処理されるため、実際には重要ではありません。その後、user_id
を他のサービスに転送できます。私はRails + Devise(+ Redisまたはmem-cached、またはCookieストレージなど)を考えましたが、可能性はたくさんあります。重要なことは、サービスXがユーザーを認証する必要がないことです。
これら2つのソリューションは、次の点でどのように比較されますか?
それとも、ここで言及していない別の解決策を提案するでしょうか?
私はソリューション1の方が好きですが、正しい方向に進んでいるという事実で私を保護するデフォルトの実装をあまり見つけていません。
私の質問が閉じられないことを願っています。他にどこに尋ねればいいのか本当に分かりません。
前もって感謝します
私が理解していることに基づいて、それを解決する良い方法は、OAuth 2プロトコルを使用することです(それについての詳細は http ://oauth.net/2/ )
ユーザーがアプリケーションにログインすると、トークンを取得し、このトークンを使用して他のサービスに送信して、リクエストでそれらを識別することができます。
連鎖マイクロサービス設計の例
リソース:
OpenID Connectを使用してこれを実装するには、APIゲートウェイパターンを使用する必要があります。ユーザーはIDPによって認証され、承認サーバーからJWTトークンを取得します。これで、APIゲートウェイシステムはこのトークンをRedisデータベースに保存し、ブラウザーでCookieを設定できます。 APIゲートウェイはCookieを使用してユーザーリクエストを検証し、トークンをMicroservicesに送信します。
API Gatewayは、パブリックJavaスクリプトクライアントアプリ、従来のWebアプリ、ネイティブモバイルアプリ、およびマイクロサービスアーキテクチャのサードパーティクライアントアプリなど、あらゆる種類のクライアントアプリの単一のエントリポイントとして機能します。
詳細については http://proficientblog.com/microservices-security/ をご覧ください。
idenitty server 4 を使用して認証と承認を行うことができます
Firewall Architectureを使用する必要があるため、セキュリティ、堅牢性、スケーラビリティ、および使いやすさをさらに制御できます