0

私は、 Spring Boot と oAuth2に関する @Dave Syers の優れたチュートリアルに従っています。

ログイン機能を作成できたので、保護されたリソースにアクセスする前に Facebook にログインする必要があります。

しかし今、「サインアップ」ページを作成しようとしています。たとえば、stackoverflow には facebook でサインアップするオプションがあるため、詳細は facebook から Stackoverflow.com に送信されます。これは oAuth2 でどのように実行できますか? spring-social でこれを行うことができましたが、直接の oauth2 アプローチでこれを行う方法について頭を悩ませることはできません。

助けてください?

4

2 に答える 2

4

答えは思ったより簡単でした。必要なことは、カスタム AuthenticationSuccessHandler をフィルターに追加することだけでした。

私がしなければならなかったのは、 Filter ssoFilter() を返すメソッドに AuthenticationSuccessHandler ハンドルを追加することだけでした。

@Autowired
private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;


private Filter ssoFilter() {
    OAuth2ClientAuthenticationProcessingFilter facebookFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/facebook");
    OAuth2RestTemplate facebookTemplate = new OAuth2RestTemplate(facebook(), oauth2ClientContext);
    facebookFilter.setRestTemplate(facebookTemplate);
    facebookFilter.setTokenServices(new UserInfoTokenServices(facebookResource().getUserInfoUri(), facebook().getClientId()));
    facebookFilter.setAuthenticationSuccessHandler(customAuthenticationSuccessHandler);
    return facebookFilter;
} 

そして、私の CustomAuthenticationSuccessHandler は、 AuthenticationSuccessHandler を拡張した単なるコンポーネントでした

@Component
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                    Authentication authentication) throws IOException, ServletException {
    //implementation
}

}

したがって、サインアップ ページでは単純に同じログイン アクションを使用できましたが、成功ハンドラーではユーザーを作成し、DB に保存しました。

于 2016-08-27T08:54:30.200 に答える
2

統合された jwt-oauth2-signup-login を作成するのは困難です。いくつかの簡単な方法があります: 1、satellizer-spring-boot または satellizer を使用する。2、春の社交を利用する。3、別のプロバイダーとして jwt を spring oauth2 に追加します。

これは3で行う方法です:私はまだサインアップ+ oauth2を使用していません(私はSpring Socialが好きで、同じ機能を実行できるため)が、理論的には非常に簡単に実行でき、次のように実行できます。

まず、ユーザーがログインするとき (Facebook に登録するとログイン ページにも移動します)、Facebook からユーザーの情報をインポートして、その情報をユーザー モデルに書き込むだけです。コントローラーとビューで実行できます。

フロントページでは、ユーザーがログインするか、新しいアカウントを登録するかを簡単に選択できます。Spring ブートでは、複数のフィルターと複数の AuthenticationProvider がサポートされているため、oauth2 用と別の (jwt ローカル サーバー) フィルターの 2 つのフィルターを使用できます。ローカルサーバー登録用。

1、標準のスプリング ブート jwtFilter.java ファイルをダウンロードし、config ディレクトリに配置します。

2,新規ユーザー登録用のコントローラーを作成します。3、/login を作成して jwt トークンを返します。

3、2 つのフィルターを作成します。1 つは oauth2 用、もう 1 つはローカル jwt 用です。

4、/register へのサインアップ リンクを作成します。/login への login タグ リンク。

ps: 標準の Spring Boot jwt プロジェクトからすべての行をコピーできます

于 2016-08-25T02:25:09.830 に答える