Как получить токен доступа от facebook с помощью spring boot security

#java #spring #spring-boot #spring-security

#java #spring #spring-boot #spring-безопасность

Вопрос:

Я должен получить токен доступа от facebook с помощью spring security, у меня есть следующий код для настройки HTTP

 @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**", "/webjars/**")
                .permitAll()
                .anyRequest()
                .authenticated().and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
        .and().logout().logoutSuccessUrl("/").permitAll()
        .and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        .and().addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
    }
  

Кроме того, я могу получить принципал после входа в facebook. Но мне нужно получить маркер доступа зарегистрированного пользователя.

Это зависимости, которые я использую для обеспечения безопасности spring boot,

     implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    compile group: 'org.springframework.security.oauth.boot', name: 'spring-security-oauth2-autoconfigure', version: '2.1.3.RELEASE'
  

Это фильтр, который я использую,

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

    tokenServices.setRestTemplate(facebookTemplate);
    facebookFilter.setTokenServices(tokenServices);

    return facebookFilter;
}
  

Есть ли какой-либо способ получить токен доступа с помощью spring boot security

Комментарии:

1. Почему вы вручную добавляете фильтр вместо использования @EnableOAuth2Sso ?

2. Вместо этого я использую @EnableOAuth2Client , поэтому я добавил фильтр вручную. Если я использую @EnableOAuth2Sso , смогу ли я получить токен доступа?

3. В общем, есть способы (вы можете посмотреть, как это делает OAuth2RestTemplate itself); если вы можете объяснить, что вы хотите с этим сделать, чего нельзя добиться прозрачным использованием шаблона, это было бы полезно.

4. Единственное, мне нужно получить токен доступа, поэтому я вручную настроил фильтр и пользователя @EnableOAuth2Client , если бы этого можно было достичь с помощью @EnableOAuth2Sso , я бы пошел на это

5. Я получил токен доступа от OAuth2RestTemplate после входа в Facebook

Ответ №1:

Если facebook правильно интегрирован с spring security, вы могли бы внедрить:

 @Autowired
OAuth2ClientContext oAuth2ClientContext;
  

и с помощью этого объекта получите токен:

 oAuth2ClientContext.getAccessToken().getValue();