9

ビジネス用と 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 は常に「勝つ」ように見えます。

では、認証されていない呼び出しを認証サーバーに委任するリソース サーバーを作成する正しい方法は何でしょうか?

4

1 に答える 1