web-dev-qa-db-ja.com

Spring @EnableResourceServer vs @ EnableOAuth2Sso

これまでに読んだチュートリアルのほとんどは、APIゲートウェイで@EnableOAuth2Ssoの代わりに@EnableResourceServerを使用しています。違いは何ですか?対照的にOAuth2Ssoは何をしますか?

詳細:私は、スプリングベースのマイクロサービスと単一ページのアプリにセキュリティ/インフラアーキテクチャを実装しています。しばらくの間、セキュリティ要件はありませんでしたが、SPAは異なるホスト(CORSパーティ)のオープンマイクロサービスと直接対話しました。

spring-oauthspring-zuulを使用して、セキュリティのレイヤーとゲートウェイパターンを追加します。そのため、@EnableAuthorizationServerのサービス(uaa-service)と@EnableZuulProxyおよび@EnableResourceServerのゲートウェイがあります。必要なのはpassword付与タイプのみであるため、各SPAには独自のログインフォームがあり、uaa-serviceトークンエンドポイントで認証され、ゲートウェイを通過してから続行しますそのトークンを以降のリクエストに使用します。

このアプローチには何か問題がありますか? @EnableOAuth2Ssoを使用する必要がありますか?

これらの注釈は、異なる OAuth 2.0ロール でサービスをマークします。

@ EnableResourceServer注釈は、サービス(OAuth 2.0-リソースサーバー)の観点から)アクセストークンが順番に期待されることを意味しますアクセストークンは、リソースサーバーを呼び出す前に、OAuth 2.0クライアントによって承認サーバーから取得する必要があります。

@ EnableOAuth2Sso:は、サービスをOAuth 2.0クライアントとしてマークします。これは、リソース所有者のリダイレクトを担当することを意味します(エンドユーザー)ユーザーが資格情報を入力する必要がある認証サーバーに移動します。完了後、ユーザーは認証コードを使用してクライアントにリダイレクトされます(アクセスコードと混同しないでください)。承認サーバーを呼び出してアクセストークンを取得します。その後のみ、クライアントはアクセストークンを使用してリソースサーバーを呼び出すことができます。

また、@EnableOAuth2Ssoアノテーションのソースコードを見ると、2つの興味深いことがわかります。

  • @EnableOAuth2Client。これは、サービスがOAuth 2.0 Clientになります。OAuth2RestTemplateを介してこれらのサービスを呼び出す場合、アクセストークンを(承認コードと交換した後)ダウンストリームサービスに転送できるようにします。
  • @EnableConfigurationProperties(OAuth2SsoProperties.class)。 OAuth2SsoPropertiesには、デフォルトでString loginPathというプロパティ/loginが1つだけあります。これにより、/loginによるOAuth2ClientAuthenticationProcessingFilterへのブラウザー要求がインターセプトされ、ユーザーが承認サーバーにリダイレクトされます。

@ EnableOAuth2Ssoを使用する必要がありますか?

場合によります:

  • APIゲートウェイをOAuth 2.0クライアント(Authorization Code Flowまたはリソース所有者パスワード資格情報フロー、答えはイエスです、おそらくあなたはそうすべきです.@EnableOAuth2Ssoがリソース所有者パスワード資格情報フローを非常にサポートしているかどうかはおそらくわかりませんとにかく、本当に(本当に!)そうしない十分な理由がない限り、承認コードフローを使用することをお勧めします。承認コードフローを使用する場合、ダウンストリームマイクロサービスを@EnableResourceServerとしてマークすることができます。ゲートウェイはOAuth 2.0クライアントであり、マイクロサービスはOAuth 2.0リソースサーバーです。
  • ブラウザとの対話が必要ない場合(クライアント資格情報フロー)、またはを使用するSPAがある場合暗黙フローの場合は、@ EnableResourceServerを使用する必要があります。つまり、有効なアクセストークンを持つリクエストのみを受け入れます。
64
Danylo Zatorsky