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


138

マイクロサービスアーキテクチャにまともな/安全な認証戦略を選択するのに苦労しています。このトピックで私が見つけた唯一のSO投稿はこれです:マイクロサービスアーキテクチャでのシングルサインオン

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

私の研究から、2つの可能な戦略があることがわかります。

1.共有アーキテクチャ

共有アーキテクチャ

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

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

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

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


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

  • 安心
  • 堅牢性
  • スケーラビリティ
  • 使いやすさ

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

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

私の質問が閉じられないことを願っています。他にどこに質問すればいいのか本当にわからない。

前もって感謝します


1
達成しようとしていることの詳細を教えていただけますか?最初のケースでは、認証はRedisに対して行われますか、それともサービス自体で行われますか?2番目の図でRedisが欠落していますが、これは意図的なものですか?
プラメンペトロフ

情報をいくつか追加しました。まだはっきりしないことを教えてください。ありがとう!
オーガスティンリーディンガー2015

OAuthプロトコルを使用するマイクロサービスを作成するアイデアと、他のサービスが作成したトークンを使用することについて考えましたか?
ティアレバルビ

私はこの解決策に興味がありますが、それが実際にどのように機能するのかまだわかりません。私がそれのいくつかの標準的な実装をどこで見つけることができるか知っていますか?
オーガスティンリーディンガー、2015

@AugustinRiedinger、これを上げてくれてありがとう。私はまた、一歩一歩踏み出すことによって、モノリシックWebアプリケーションをマイクロサービスに分割しています。あなたの場合、Services 1-nはステートレスまたはステートフルです。状態が満杯の場合は、これらの各サービスでのセッションの管理について検討しましたか。ありがとう
Manchanda。P

回答:


61

私が理解していることに基づいて、それを解決する良い方法はOAuth 2プロトコルを使用することですhttp://oauth.net/2/でそれについてのより多くの情報を見つけることができます)

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

OAuth 2モデル

連鎖マイクロサービス設計の例 建築モデル

リソース:


1
ありがとうございます。:私はかなり同じ溶液を分解し、この非常に良い記事見つけdejanglozic.com/2014/10/07/...
オーギュRiedinger

16
あなたの答えは素晴らしいですが、API Gatewayから(その内部から、またはAuthMicroServiceで)生成されたトークンは、認証を目的とせず、おそらく内部にoauth管理を持たないランダムなマイクロサービスによってどのように処理できますか彼のビジネスコード?
mfrachet 2015年

たとえば、Netflix Zuulを使用して、ゲートウェイで受信したトークンをすべてのサービスに送信すると、サービスはユーザー情報を認識します。docs.spring.io/spring-boot/docs/current/reference/htmlsingle/...
ティアレバルビ

サービス間でOAuth2を使用するもう1つの優れた点は、サービス認証済みアクションとユーザー認証済みアクションを区別するエンドポイントを持つことができることです。
2016年

2
OAuthは、別のシステムに保持されているユーザーのデータへのアクセスをシステムに許可することに関するものです。これは私にとってSAMLの良い例のように見えます。
Rob Grant

8

短い答え:Oauth2.0の種類のトークンベースの認証を使用します。これは、ウェブアプリやモバイルアプリなど、あらゆるタイプのアプリケーションで使用できます。Webアプリケーションに関連する一連のステップは、次のようになります。

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

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

ここに画像の説明を入力してください


AWS Lambdaは「冷たく」なり、起動に時間がかかりませんか?それはログインを遅くしますね?
tsuz

@ tsuz、AWSは並行性を予約できるラムダの並行性機能を導入しました。これにより、コールドスタートの問題を解決できます。docs.aws.amazon.com/lambda/latest/dg/...
サンディープナイール

私は何年も前にこの答えを見
たかったの

@Sandeep、あなたはプロビジョンド同時実行性を参照しており、予約されていないと思います。
Anil Kumar

0

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

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.