2016-06-28 13 views
3

私たちは3つのマイクロサービスを持っています:microA、microB & microC。マイクロA &がMicroBは1 アーキテクチャの仕組みマイクロサービスとOpenID接続?

  • マイクロA &のMicroC製品2.明らか
  • に電力を供給している、私たちは "OpenIDの接続" プロバイダを実装する我々の場合には、セキュリティ層を必要とする製品に電力を供給している

    • ビジネスニーズに適しています。 OpenIDプロバイダをスタックに追加します。

      ユーザー/権限管理は、自然&非常に簡単です:私たちは権利のサブセットに各microservices上のユーザーのOpenIDの識別子関連付ける:サービスマイクロAに例えば

      を、私たちはユーザーのOpenID XXXことを保存しますこれとそれを行うことができます。それはマイクロサービスレベルで隔離されています。我々の文脈の境界を尊重する。ファイン。

      ユーザーがプロダクト1でOpenIDでログインすると、ユーザーとIDトークンにアクセストークンを付与します。

      product1がサードパーティの使用するAPIを公開すると状況がより複雑になります。

      ここで、ユーザーがサードパーティのWebアプリケーションにアクセスし、&にログインするよう促され、サードパーティがproduct1 APIに対していくつかの権利を得ることができるとします。

      私が正しくOpenID connectを理解していれば、それはすべてOAuth2上での認証についてですが、それで古典的なOAuth2スコープ管理をどうやって扱うのでしょうか?

      私が見つけた最良のシナリオは次のとおりです。

      1. 全体のOpenID認証情報

      2. を持つように接続してからにユーザーを依頼する別の認証サーバに別のフルのOAuth2プロセスを作成しますサードパーティにいくつかのスコープを与えますか?サードパーティであることを意味

      • ユーザーがOpenIDプロバイダ
      • にログインするように要求されますが、リダイレクトさと範囲を受け入れるように求め
      を要求

      これは間違いありませんか?はいの場合、OAuth2サーバーのフローはエンドユーザーへの4つのHTTPリクエストのようなものなので、2回実行すると8つのリクエストを実行して認証+認証フローを完了させるようになります。あまりにも大規模だと思われる。

    答えて

    1

    私はすでにこの問題を抱えていました。あなたのケースで私がすることは次のとおりです:

    • この新しいOpenIdマイクロサービスを使用して、ユーザーを認証し、アクセストークンを作成します。このアクセストークンは、権限、user_id、およびタイムスタンプが署名された文字列でも、この情報をデータベースに格納することもできます。

    • その後、すべての呼び出しのために(製品1またはproduct2に):

      • 私は、ヘッダーにアクセストークンを送信するためにクライアントを強制します。
      • 次に、マイクロサービスが電話を受けると(product1と言う)、OpenId Microserviceに署名された要求を送信して、ユーザーがその操作を実行できるかどうかを尋ねます。

    そうすれば、ちょうどOpenIDのmicroserviceは、認証がどのように動作するかを知っています。したがって、数週間後に認証の仕組みを変更したい場合は、OpenIdマイクロサービスで変更するだけで済みます。

    サードパーティの問題は本当に分かりません。彼らはトークンを取得し、アクセストークンヘッダー上でパッシブコールを実行できます。

    +0

    フィードバックいただきありがとうございます。 第三者にとっては、特定の範囲を要求することだけです。 例では、OpenIdマイクロサービスはproduct1、product2(など)のすべての特定のスコープについて知っている必要があります。 signin(アクセストークンを要求している)に、サードパーティはプロダクトについて特定の「権利」を要求する可能性があるためです。 – ludofleury

    関連する問題