これまでに読んだチュートリアルのほとんどは、APIゲートウェイで@EnableOAuth2Sso
の代わりに@EnableResourceServer
を使用しています。違いは何ですか?対照的にOAuth2Sso
は何をしますか?
詳細:私は、スプリングベースのマイクロサービスと単一ページのアプリにセキュリティ/インフラアーキテクチャを実装しています。しばらくの間、セキュリティ要件はありませんでしたが、SPAは異なるホスト(CORSパーティ)のオープンマイクロサービスと直接対話しました。
spring-oauth
とspring-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を使用する必要がありますか?
場合によります:
@EnableOAuth2Sso
がリソース所有者パスワード資格情報フローを非常にサポートしているかどうかはおそらくわかりませんとにかく、本当に(本当に!)そうしない十分な理由がない限り、承認コードフローを使用することをお勧めします。承認コードフローを使用する場合、ダウンストリームマイクロサービスを@EnableResourceServer
としてマークすることができます。ゲートウェイはOAuth 2.0クライアントであり、マイクロサービスはOAuth 2.0リソースサーバーです。