#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();