2017-07-12 11 views
0

私たちは、UIアプリケーションがアクセストークンを取得してAPIサーバと通信する認証サーバを持っています。現在、同じユーザーを認証するためにSSOが必要な第3のアプリケーションを構築していますが、これも問題ありません。SpringでOAuth2とJWTトークンを使用して特定のユーザーの代わりに保護されたリソースを呼び出す方法はありますか?

しかし、この3番目のアプリケーションでAPIサーバ上でいくつかのリソースを使用する必要があるシナリオがありますが、私の理解から、クライアントID /シークレットを使用して認証サーバーからトークンを取得し、アクセストークン。これは大丈夫だと思うが、私はAPIサーバがそのトークンをどのように認可しようとしているかわからない(ヒントがこれになるだろう。)。

しかし、主な問題は、このリクエストをユーザーに代わって送信することです。これは、APIサーバーがすべてのユーザーのアクティビティを監査する必要があるためです。 Spring Boot/OAuth2とJWTトークンを使用してこれをどのように達成できますか?

私はドキュメントを読んで、@ EnableOauth2Sso @EnableAuthorisationServerなどについて知っていますが、このシナリオは明確ではなく、Springで実装されているかどうかはわかりません。

このシナリオの実装がない場合は、何をお勧めしますか?あなたがこれに関して持っていた経験は、共有していただけますか?

+0

私はあなたの3番目のアプリケーションがoauth認証サーバーと通信するuser + client、そしてその場合は、Spring OAuthで簡単に実行できることを確認してください。 – Afridi

答えて

0

APIサーバーは、リソースサーバーの役割を果たします。その目的のために設計された注釈があります:@EnableResourceServer。あなたのクライアントアプリケーションは、便利なOAuth2RestTemplateを使用してこのリソースを消費します。

適切にリソースサーバを設定して、この作業を取得するには、2つのアプローチがあります。

  1. は、あなたのリソースサーバアプリで直接公開鍵を持っている:クライアントアプリはによって提供さトークンを使用しようとするこの方法をリソースサーバーからリソースを取得するには、トークンが単独で有効かどうかを確認します。
  2. 特定のアクセストークンが有効で、リソースの取得を許可または拒否する応答に応じて、許可サーバーに問い合わせるようにリソースサーバーを構成します。

私はsample app on githubを最初の方法で投稿しました。ここでは、認可サーバー、クライアントとリソースサーバー、およびこの実装に必要なすべての構成間の相互作用を確認できます。それがあなたを助けることを願ってください。

+0

公開鍵を公開サーバーに保存し、エンドポイント "/ oauth/token_key"を介してアクセスできるようにします。私は、Springが公開鍵を自動的に取得してトークン検証に使うことができるのかどうかを見極めようとしていますが、幸運はありません。とにかく、私は手動でデフォルトトークンコンバータJwtAccessTokenConverterをカスタマイズすることになりました – xbmono

+1

あなたのリソースサーバーで 'security.oauth2.resource.jwt.key-uri'プロパティを試してみてください –

関連する問題