1

我一直在尝试将 spring-social 集成到我们的应用程序中,并且在理解关于谁应该在安全上下文中设置访问令牌的工作流程时遇到了一些困难。我正在使用 spring-social 1.1.4 库和 spring-social-twitter 1.1.2.RELEASE。我已经使用 SpringSocialConfigurer 将社交登录添加到 Twitter,并且能够点击我的 /auth/twitter API 来触发 OAuth1 流以获取请求令牌,重定向到 Twitter 以登录,然后通过我的身份验证获取访问令牌请求令牌。获得请求令牌后,我希望我的 Twitter 连接能够持久保存到我的 UserConnection 表中。但是,这并没有发生,而是我被重定向到 /signup URL。检查 SocialAuthenticationFilter 中的代码后,我看到: 在此处输入图像描述

其中第 201 行返回 null,因此触发第 206 行重定向到 /signup URL。我本来希望我的身份验证设置为 SocialAuthenticationToken。我是否误解了这里应该发生的流程?不确定这是否有帮助,但我将 SpringSocialConfigurer 连接到的现有 spring-security 过滤器链如下:

SpringSocialConfigurer springSocialConfigurer = new SpringSocialConfigurer()
    .connectionAddedRedirectUrl("/connectionAdded")
    .postLoginUrl("/postLogin")
    //.postLoginUrl("/")
    .signupUrl("/signup")
    .defaultFailureUrl("/#/login")
    .alwaysUsePostLoginUrl(true);
springSocialConfigurer
    .addObjectPostProcessor(new ObjectPostProcessor<SocialAuthenticationFilter>() {
      @Override
      public <O extends SocialAuthenticationFilter> O postProcess(O filter) {
        //filter.setAuthenticationSuccessHandler(loginSuccessHandler);
        System.out.println(filter.getClass().getName());
        return filter;
      }
    });

http.csrf()
    .disable()
    .headers()
    .frameOptions()
    .disable()
    .and()
    .sessionManagement()
    .sessionFixation()
    .none()
    .enableSessionUrlRewriting(false)
    .and()
    .formLogin()
    .permitAll()
    .successHandler(successHandler)
    .failureHandler(failureHandler)
    .loginPage("/login")
    .loginProcessingUrl("/login_post.htm")
    .and()
    .authorizeRequests()
    .antMatchers("/account/wishlist/**", "/account/**", "/auth/**")
    .access("isAuthenticated()")
    .and()
    .requiresChannel()
    .antMatchers("/", "/**")
    .requiresSecure()
    .and()
    .logout()
    .invalidateHttpSession(true)
    .deleteCookies("ActiveID")
    .logoutUrl("/logout")
    .and()
    .portMapper()
    .http(80)
    .mapsTo(443)
    .http(8080)
    .mapsTo(8443)
    .http(8081)
    .mapsTo(8444)
    .http(8082)
    .mapsTo(8445)
    .and()
      .addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
      .addFilterBefore(sessionFixationProtectionFilter, SessionManagementFilter.class)
      .rememberMe()
      .tokenValiditySeconds(1209600)
    .and()
      .apply(springSocialConfigurer);
4

0 回答 0