ビジネス用と Spring OAuth 2 を使用したユーザー認証用の 2 つの独立したサービスを開発したい
それらを Business-Service および OAuth-Service と呼びましょう。
リクエストが認証されない場合は、Business-Service を OAuth-Service に委譲する必要があります。クライアント アプリケーション (Android アプリ) は、事前に OAuth サービスについて認識してはならず、認証されていない要求に対して 302 HTTP リダイレクトを使用して、ビジネス サービスによって委任される必要があります。正確には、API ランディング ページでhttp://businessservice.com/loginへのリンクを提供する必要があり、クライアント アプリがこのリンクをたどることを決定すると、OAuth サービスにリダイレクトされます。
Business-Service に@EnableOAuth2Resourceのアノテーションを付けると、そのすべてのリソースが保護され、アクセス トークンなしで curl すると 401 が返されます。ここまでは順調ですね。次のようなアクセストークンを提供すると:
curl -v http://localhost:8667/resource/ -H "Authorization: Bearer $TOKEN"
リソースにアクセスできます。まだいい。
ただし、OAuth サービスへのリダイレクトを有効にするために@EnableOAuth2SsoでBusiness-Service にアノテーションを付けると、アクセス トークン (上記と同じ curl) を使用してリソースにアクセスする機能が失われ、ログイン ページhttpに 302 のみが返されます。 //localhost:8667/ログイン
両方のアノテーションを使用すると、認証は機能しますが、 http://localhost:8667/loginを呼び出すと404 が返されるため、@EnableOAuth2Resource は常に「勝つ」ように見えます。
では、認証されていない呼び出しを認証サーバーに委任するリソース サーバーを作成する正しい方法は何でしょうか?