SpringCloud-テクノロジー - -Zuulは、認証サービスを統合し、実際のケースOAuth2.0

1.ディスプレイスタンド組成

  画像

  API Gatewayの理由は、外部クライアントがビジネスニーズを完了するために、複数のサービス・インターフェースを呼び出す必要があるかもしれませんが、一般的には異なるマイクロサービスは、異なるサービスのアドレスを持っているマイクロサービスアーキテクチャの登場ですので、もしそれぞれとの直接のクライアントマイクロ通信サービスは、次の質問があります。

  • クライアントは繰り返し、異なるマイクロサービスを要求したクライアントの複雑さを増します。
  • 特定のシーンでのクロスドメインリクエストは、比較的処理が複雑になります。
  • 複雑な認定は、各サービスは、独立した認証が必要です。
  • プロジェクトのイテレーションで、再構築することは困難では再分割マイクロサービスである必要があります。例えば、複数のサービスは、一つまたはサービスに分割複数に組み合わせることができます。クライアントが直接マイクロサービスと通信する場合は、その後、再構成は実施が困難になります。
  • 一部のサービスは、いくつかの困難があるだろうマイクロプロトコルのファイアウォール/ブラウザ非友好的な、直接アクセスを使用することができます。

  Aゲートウェイは、クライアント側とサーバ側との間に介在する中間層である、すべての外部の要求は、この層のAPIゲートウェイを通過します。つまり、ゲートウェイので、行うためにAPIゲートウェイに引き渡さすることができ監視、より多くのビジネスロジックとセキュリティ、パフォーマンス上のAPIの態様を実現するパフォーマンス、高可用性、セキュリティが不可欠です。

  注春のマイクロクラウドサービスの構築OAuth2.0の認証および認可サービスへ

共通ゲートウェイは何?

Nginxは、香港、ZUUL、春クラウドゲートウェイ(春クラウド公式)、Linkerdなど

春の雲Zuul

        Zuulは、  オープンソースNetflixのマイクロサービスゲートウェイコンポーネントであり、それは缶ユーレカ、リボン、Hystrix及び他の成分を併用して使用します。Zuulコア(動的ルーティングなどの)一連のフィルターです。春クラウドZuul  Zuulには、それが簡単に春のクラウドで使用すること、統合されています。

Zuul1

  Zuul1サーブレットビルドに基づいて、フレームワーク、すなわち接続要求を処理するスレッド、マルチスレッドおよびブロックを使用して、深刻な遅延内部このように、多くの場合原因で機器の故障は、生存率を増加し、増加したネジ接続が発生します。

画像

Zuul2

  それは、非同期および非ブロックフレームの両方で実行されます最大の違いZuul2とZuul1は、CPUコアごとに1つのスレッドは、すべての要求と応答、要求のライフサイクルを処理し、応答がこの方法を減らし、イベントとコールバックを介して処理されていますスレッドの数、したがってオーバーヘッドは小さいです。データは、同じCPUに格納されているため、また、CPUはレベルのキャッシング、遅延、および嵐の再試行前に述べた問題を再利用するだけでなく、接続数とイベント数の方法(相対的に言って軽量スレッドスイッチの多くによってキュー記憶を削減することができますレベルの多くは、自然に)あまり消費します。この変更は、パフォーマンスが大幅に向上します。

 

画像

  注:2.0春クラウドの統合は、この段階では予定はありませんZuulの公式バージョンは、公式の春クラウドゲートウェイを使用することをお勧めします

演奏

  :を参照することができ訂正記事:Zuul&春クラウドゲートウェイ&Linkerd性能比較  、簡単な言葉で、Zuul 1.xのは、IOのAPIゲートウェイ、別の良い春クラウドゲートウェイのパフォーマンスをブロックに基づいています。

ハイアベイラビリティ

  一般的な製造環境の必要性は、複数のノードZuulユーレカサーバに登録されるように、あなたはZuulの高可用性を実現することができます。実際には、この場合は、高可用性およびその他のサービスは、高可用性(例えば:Eurkaサーバークラスタ)ないプログラムも例外ではありません。ユーレカサーバーへZuulクライアントレジスタは、クライアントが自動的にクエリZuul Zuulサーバーユーレカサーバからリストし、次に(例:リボン)ロードバランサコンポーネントを使用する場合はZuulクラスタを要求します。そうでない場合F5は、ハードウェアまたはnginxのを使用して実現することができます。

セキュリティ

  春の雲のマイクロサービスは、一般的に春のクラウドセキュリティOAuth2.0と組み合わせて使用​​することができた後、トークンは、法案を検証するためにJWTを使用して生成されたが、春のクラウドのセキュリティは、OpenIDの接続プロトコルをサポートしていません。Zuulはユーレカでサービスのガバナンスとして自身を登録するだけでなく、ユーレカサービスガバナンスからマイクロサービスの他のすべてのインスタンスの情報にアクセスできます。彼らの関係はあまりないので、別のサービスとして、これらの機能は完全に独立した存在どの認証およびマイクロビジネスやサービス、独立したのOAuth2認証および認可サービスを構築し、マイクロアローンサービススピンオフによって。独立後、ない各マイクロサービス・コール(ネットワークを含む一般的なビジネス・サービス)が、ゲートウェイを介して統一されたAPI呼び出しに、マイクロサービスインターフェイスのプレフィルタを行うには、他のマイクロ分散系サービスと安全確認の傍受・インターフェース。

ゲートウェイサービスZuulを作成します。

Mavenの

<依存性> 
   <のgroupId> org.springframework.cloud </のgroupId> 
   <たartifactId>ばねクラウドスタータのNetflix-zuul </たartifactId> 
</依存> 
<依存性> 
   <のgroupId> org.springframework.cloud </のgroupId> 
    <たartifactId>春・クラウド・スターター・ネットフリックス-ユーレカ・クライアント</たartifactId> 
</依存関係>
@SpringBootApplication 
// @ EnableOAuth2Sso 
@EnableZuulProxy 
パブリッククラスMicrosrvZuulGatewayApplication { 

    パブリック静的無効メイン(文字列[] args){ 
        SpringApplication.run(MicrosrvZuulGatewayApplication.class、引数)。
    } 
}

application.yml

春:
  ファイルアプリケーション:
    名前:microsrv Zuul-Gateway- 

サーバー:
  ポート:5555 

ユーレカ:
  インスタンス:
    preferIpAddress:trueに
  クライアント:
    serviceURLの:
      defaultzone:http://10.255.131.162:8000/eureka/,http://10.255.131.163: 8000 /ユーレカ/、HTTP://10.255.131.164:8000 /ユーレカ/ 

Zuul:
  ホスト:
    20000:ミリ秒-の接続タイムアウト
    ミリ秒ソケット・タイムアウトの:20000 
  ignoredServices: '*'   プレフィックス:共通のプレフィックスを設定するために/#API 
  ルート:
    AUTHで修理:
      パス:/ AUTH / ** 
      sensitiveHeaders:
      サービスID:idsrv-Serverの
    注文で修理:
      パス:/受注/ **
 
      sensitiveHeaders:
      サービスID:オーダーサービス
  アドオンプロキシヘッダ:真

  ユーレカは、サービス・ディスカバリを使用しているため、フォーム/サービス-IDのリクエストURLの形式は/ **自動的に「サービスID」マイクロサービスアプリケーションであるユーレカServerサービスのIDで登録に転送されます。我々はそのようなサービス登録の適切なサービスIDに転送する「注文サービス」要求として2つのルーティングルールを定義する上記の例では、によって修飾することができる zuul.prefix = / API  グローバルアドレスプレフィックス設定を設定します。デフォルトユーレカServerはそれの上に登録されているすべてのマイクロサービスに公開されます。あなたは使用することができます  zuul.ignored・サービスの ような行動を禁止するプロパティを、とだけ明示的に設定されたサービスは、公開されます。

認証と認可のOAuth2.0を統合Zuul

  Zuul統合OAuth2.0は1がJwtToken統一法案、裁判官やゲートウェイで他の権限を使用して、公開鍵認証を使用してサーバを動作させるために許可されている、2つのアイデアがあり、他には、リソース側の処理を行い、前方のみのルートをゲートウェイすることです。

リソース側の設定

Mavenの

<! -のOAuth2 - > 
        <依存> 
            <groupIdを> org.springframework.boot </ groupIdを> 
            <たartifactId>春・ブート・スターター・セキュリティ</たartifactId> 
        </依存関係> 
        <依存> 
            <groupIdを> org.springframework .security.oauth </のgroupId> 
            <たartifactId>スプリングセキュリティのOAuth2 </たartifactId> 
            <バージョン> 2.3.3.RELEASE </バージョン> 
        </依存> 
        <依存性> 
            <のgroupId> org.springframework.security.oauth。ブート</ groupIdを> 
            <たartifactId>春・セキュリティのOAuth2-自動設定</たartifactId> 
            <バージョン> 2.0.5.RELEASE </バージョン> 
        </依存関係>

春ブーツ

@SpringBootApplication 
@EnableResourceServer 
パブリッククラスDemoApplication { 

    パブリック静的無効メイン(文字列[] args){ 
        SpringApplication.run(DemoApplication.class、引数)。
    } 
} 
@RestController {publicクラスAccountController ( "/プリンシパル")@GetMapping @PreAuthorize( "hasAnyAuthority( 'ユーザ')") パブリックプリンシパルユーザ(プリンシパルプリンシパル){ 主返します。 } ( "/クエリ")@GetMapping @PreAuthorize( "hasAnyAuthority( 'すべて')") パブリック文字列全て(){ "全て权限具有"リターン。 } }

application.yml

ログ:
  レベル:
    org.springframework:DEBUG 
サーバー:
  ポート:5000 
セキュリティ:
  のOAuth2:
    リソース:
#が好む-トークン情報:真
#ユーザー情報-URIます。http:// localhost:8080 / API / V1 /ユーザー/校長
#トークン情報-URIます。http:// localhost:8080 /にOAuth / check_token 
      JWT: キー-URIます。http:// localhost:8080 /にOAuth / token_key 
        キーと値:| 
          ----- BEGIN PUBLIC KEY ----- 
          MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm4irSNcR7CSSfXconxL4 
          g4M4j34wTWdTv93ocMn4VmdB7rCBU / BlxXtBUf / cgLIgQhQrAPszSZSmxiEXCOkG 
          Pr4aQBQuPgmNIR95Dhbzw / ZN0BnecAt3ZfkkDBHv8kH3kR / jYGTdwrxKeDgXGljN 
          sTRhbjuASxPG / Z6gU1yRPCsgc2r8NYnztWGcDWqaobqjG3 / yzFmusoAboyV7asIp
          o4yk378LmonDNwxnOOTb2Peg5PeelwfOwJPbftK1VOOt18zA0cchw6dHUzq9NlB8 
          CLPの/ VdBap9BxU3 / 0YoFXRIc18nyzrWo2BcY2KQqX // AJC3OAfrfDmo + BGK8E0mp 
          8wIDAQAB 
          ----- END PUBLIC KEY -----

  最後に、あなたは、ゲートウェイへのユーザーアクセスが許可されていないとき、それは認証サーバのログイン認証にジャンプしますので、こと、(非必須)のクライアントOAuth2.0としてZuul @ EnableOAuth2Sso注釈上で有効にすることができます。

セキュリティ:
  のOAuth2:
    クライアント:
      アクセス・トークンURIます。http:// localhost:8080 /にOAuth /トークン
      ユーザーの権限-URIます。http:// localhost:8080 /にOAuth / AUTHORIZE 
      クライアントID:client_test 
      クライアント秘密:secret_test 
    リソース:
      ユーザー情報-URIます。http:// localhost:8080 / API / V1 /ユーザー/元本
      好む-トークン情報:偽

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  API Gatewayの理由は、外部クライアントがビジネスニーズを完了するために、複数のサービス・インターフェースを呼び出す必要があるかもしれませんが、一般的には異なるマイクロサービスは、異なるサービスのアドレスを持っているマイクロサービスアーキテクチャの登場ですので、もしそれぞれとの直接のクライアントマイクロ通信サービスは、次の質問があります。

  • クライアントは繰り返し、異なるマイクロサービスを要求したクライアントの複雑さを増します。
  • 特定のシーンでのクロスドメインリクエストは、比較的処理が複雑になります。
  • 複雑な認定は、各サービスは、独立した認証が必要です。
  • プロジェクトのイテレーションで、再構築することは困難では再分割マイクロサービスである必要があります。例えば、複数のサービスは、一つまたはサービスに分割複数に組み合わせることができます。クライアントが直接マイクロサービスと通信する場合は、その後、再構成は実施が困難になります。
  • 一部のサービスは、いくつかの困難があるだろうマイクロプロトコルのファイアウォール/ブラウザ非友好的な、直接アクセスを使用することができます。

  Aゲートウェイは、クライアント側とサーバ側との間に介在する中間層である、すべての外部の要求は、この層のAPIゲートウェイを通過します。つまり、ゲートウェイので、行うためにAPIゲートウェイに引き渡さすることができ監視、より多くのビジネスロジックとセキュリティ、パフォーマンス上のAPIの態様を実現するパフォーマンス、高可用性、セキュリティが不可欠です。

  注春のマイクロクラウドサービスの構築OAuth2.0の認証および認可サービスへ

共通ゲートウェイは何?

Nginxは、香港、ZUUL、春クラウドゲートウェイ(春クラウド公式)、Linkerdなど

春の雲Zuul

        Zuulは、  オープンソースNetflixのマイクロサービスゲートウェイコンポーネントであり、それは缶ユーレカ、リボン、Hystrix及び他の成分を併用して使用します。Zuulコア(動的ルーティングなどの)一連のフィルターです。春クラウドZuul  Zuulには、それが簡単に春のクラウドで使用すること、統合されています。

Zuul1

  Zuul1サーブレットビルドに基づいて、フレームワーク、すなわち接続要求を処理するスレッド、マルチスレッドおよびブロックを使用して、深刻な遅延内部このように、多くの場合原因で機器の故障は、生存率を増加し、増加したネジ接続が発生します。

画像

Zuul2

  それは、非同期および非ブロックフレームの両方で実行されます最大の違いZuul2とZuul1は、CPUコアごとに1つのスレッドは、すべての要求と応答、要求のライフサイクルを処理し、応答がこの方法を減らし、イベントとコールバックを介して処理されていますスレッドの数、したがってオーバーヘッドは小さいです。データは、同じCPUに格納されているため、また、CPUはレベルのキャッシング、遅延、および嵐の再試行前に述べた問題を再利用するだけでなく、接続数とイベント数の方法(相対的に言って軽量スレッドスイッチの多くによってキュー記憶を削減することができますレベルの多くは、自然に)あまり消費します。この変更は、パフォーマンスが大幅に向上します。

 

画像

  注:2.0春クラウドの統合は、この段階では予定はありませんZuulの公式バージョンは、公式の春クラウドゲートウェイを使用することをお勧めします

演奏

  :を参照することができ訂正記事:Zuul&春クラウドゲートウェイ&Linkerd性能比較  、簡単な言葉で、Zuul 1.xのは、IOのAPIゲートウェイ、別の良い春クラウドゲートウェイのパフォーマンスをブロックに基づいています。

ハイアベイラビリティ

  一般的な製造環境の必要性は、複数のノードZuulユーレカサーバに登録されるように、あなたはZuulの高可用性を実現することができます。実際には、この場合は、高可用性およびその他のサービスは、高可用性(例えば:Eurkaサーバークラスタ)ないプログラムも例外ではありません。ユーレカサーバーへZuulクライアントレジスタは、クライアントが自動的にクエリZuul Zuulサーバーユーレカサーバからリストし、次に(例:リボン)ロードバランサコンポーネントを使用する場合はZuulクラスタを要求します。そうでない場合F5は、ハードウェアまたはnginxのを使用して実現することができます。

セキュリティ

  春の雲のマイクロサービスは、一般的に春のクラウドセキュリティOAuth2.0と組み合わせて使用​​することができた後、トークンは、法案を検証するためにJWTを使用して生成されたが、春のクラウドのセキュリティは、OpenIDの接続プロトコルをサポートしていません。Zuulはユーレカでサービスのガバナンスとして自身を登録するだけでなく、ユーレカサービスガバナンスからマイクロサービスの他のすべてのインスタンスの情報にアクセスできます。彼らの関係はあまりないので、別のサービスとして、これらの機能は完全に独立した存在どの認証およびマイクロビジネスやサービス、独立したのOAuth2認証および認可サービスを構築し、マイクロアローンサービススピンオフによって。独立後、ない各マイクロサービス・コール(ネットワークを含む一般的なビジネス・サービス)が、ゲートウェイを介して統一されたAPI呼び出しに、マイクロサービスインターフェイスのプレフィルタを行うには、他のマイクロ分散系サービスと安全確認の傍受・インターフェース。

ゲートウェイサービスZuulを作成します。

Mavenの

<依存性> 
   <のgroupId> org.springframework.cloud </のgroupId> 
   <たartifactId>ばねクラウドスタータのNetflix-zuul </たartifactId> 
</依存> 
<依存性> 
   <のgroupId> org.springframework.cloud </のgroupId> 
    <たartifactId>春・クラウド・スターター・ネットフリックス-ユーレカ・クライアント</たartifactId> 
</依存関係>
@SpringBootApplication 
// @ EnableOAuth2Sso 
@EnableZuulProxy 
パブリッククラスMicrosrvZuulGatewayApplication { 

    パブリック静的無効メイン(文字列[] args){ 
        SpringApplication.run(MicrosrvZuulGatewayApplication.class、引数)。
    } 
}

application.yml

春:
  ファイルアプリケーション:
    名前:microsrv Zuul-Gateway- 

サーバー:
  ポート:5555 

ユーレカ:
  インスタンス:
    preferIpAddress:trueに
  クライアント:
    serviceURLの:
      defaultzone:http://10.255.131.162:8000/eureka/,http://10.255.131.163: 8000 /ユーレカ/、HTTP://10.255.131.164:8000 /ユーレカ/ 

Zuul:
  ホスト:
    20000:ミリ秒-の接続タイムアウト
    ミリ秒ソケット・タイムアウトの:20000 
  ignoredServices: '*'   プレフィックス:共通のプレフィックスを設定するために/#API 
  ルート:
    AUTHで修理:
      パス:/ AUTH / ** 
      sensitiveHeaders:
      サービスID:idsrv-Serverの
    注文で修理:
      パス:/受注/ **

      sensitiveHeaders:
      サービスID:オーダーサービス
  アドオンプロキシヘッダ:真

  ユーレカは、サービス・ディスカバリを使用しているため、フォーム/サービス-IDのリクエストURLの形式は/ **自動的に「サービスID」マイクロサービスアプリケーションであるユーレカServerサービスのIDで登録に転送されます。我々はそのようなサービス登録の適切なサービスIDに転送する「注文サービス」要求として2つのルーティングルールを定義する上記の例では、によって修飾することができる zuul.prefix = / API  グローバルアドレスプレフィックス設定を設定します。デフォルトユーレカServerはそれの上に登録されているすべてのマイクロサービスに公開されます。あなたは使用することができます  zuul.ignored・サービスの ような行動を禁止するプロパティを、とだけ明示的に設定されたサービスは、公開されます。

認証と認可のOAuth2.0を統合Zuul

  Zuul統合OAuth2.0は1がJwtToken統一法案、裁判官やゲートウェイで他の権限を使用して、公開鍵認証を使用してサーバを動作させるために許可されている、2つのアイデアがあり、他には、リソース側の処理を行い、前方のみのルートをゲートウェイすることです。

リソース側の設定

Mavenの

<! -のOAuth2 - > 
        <依存> 
            <groupIdを> org.springframework.boot </ groupIdを> 
            <たartifactId>春・ブート・スターター・セキュリティ</たartifactId> 
        </依存関係> 
        <依存> 
            <groupIdを> org.springframework .security.oauth </のgroupId> 
            <たartifactId>スプリングセキュリティのOAuth2 </たartifactId> 
            <バージョン> 2.3.3.RELEASE </バージョン> 
        </依存> 
        <依存性> 
            <のgroupId> org.springframework.security.oauth。ブート</ groupIdを> 
            <たartifactId>春・セキュリティのOAuth2-自動設定</たartifactId> 
            <バージョン> 2.0.5.RELEASE </バージョン> 
        </依存関係>

春ブーツ

@SpringBootApplication 
@EnableResourceServer 
パブリッククラスDemoApplication { 

    パブリック静的無効メイン(文字列[] args){ 
        SpringApplication.run(DemoApplication.class、引数)。
    } 
} 
@RestController {publicクラスAccountController ( "/プリンシパル")@GetMapping @PreAuthorize( "hasAnyAuthority( 'ユーザ')") パブリックプリンシパルユーザ(プリンシパルプリンシパル){ 主返します。 } ( "/クエリ")@GetMapping @PreAuthorize( "hasAnyAuthority( 'すべて')") パブリック文字列全て(){ "全て权限具有"リターン。 } }

application.yml

ログ:
  レベル:
    org.springframework:DEBUG 
サーバー:
  ポート:5000 
セキュリティ:
  のOAuth2:
    リソース:
#が好む-トークン情報:真
#ユーザー情報-URIます。http:// localhost:8080 / API / V1 /ユーザー/校長
#トークン情報-URIます。http:// localhost:8080 /にOAuth / check_token 
      JWT: キー-URIます。http:// localhost:8080 /にOAuth / token_key 
        キーと値:| 
          ----- BEGIN PUBLIC KEY ----- 
          MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm4irSNcR7CSSfXconxL4 
          g4M4j34wTWdTv93ocMn4VmdB7rCBU / BlxXtBUf / cgLIgQhQrAPszSZSmxiEXCOkG 
          Pr4aQBQuPgmNIR95Dhbzw / ZN0BnecAt3ZfkkDBHv8kH3kR / jYGTdwrxKeDgXGljN
          sTRhbjuASxPG / Z6gU1yRPCsgc2r8NYnztWGcDWqaobqjG3 / yzFmusoAboyV7asIp 
          o4yk378LmonDNwxnOOTb2Peg5PeelwfOwJPbftK1VOOt18zA0cchw6dHUzq9NlB8 
          CLPの/ VdBap9BxU3 / 0YoFXRIc18nyzrWo2BcY2KQqX // AJC3OAfrfDmo + BGK8E0mp 
          8wIDAQAB 
          ----- END PUBLIC KEY -----

  最後に、あなたは、ゲートウェイへのユーザーアクセスが許可されていないとき、それは認証サーバのログイン認証にジャンプしますので、こと、(非必須)のクライアントOAuth2.0としてZuul @ EnableOAuth2Sso注釈上で有効にすることができます。

セキュリティ:
  のOAuth2:
    クライアント:
      アクセス・トークンURIます。http:// localhost:8080 /にOAuth /トークン
      ユーザーの権限-URIます。http:// localhost:8080 /にOAuth / AUTHORIZE 
      クライアントID:client_test 
      クライアント秘密:secret_test 
    リソース:
      ユーザー情報-URIます。http:// localhost:8080 / API / V1 /ユーザー/元本
      好む-トークン情報:偽

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/liboware/p/12540662.html