5

I'm trying to validate Android/iOS client phone number or email address using Facebook Account-Kit service. I'm not sure how to validate the authorization code or access token with spring boot based back-end server and return the my own access token.

Between, I have gone thorough this blog https://www.baeldung.com/spring-security-5-oauth2-login, but it session based. I'm not clear how to change this to stateless (e.g /oauth/token).

Could anyone please let me know how to solve the issue ?

Reference : [https://developers.facebook.com/docs/accountkit/graphapi][1]

Here is my code :

@Configuration
@EnableOAuth2Client
public class SocialConfig extends WebSecurityConfigurerAdapter {

@Autowired
OAuth2ClientContext oauth2ClientContext;

private String[] PUBLIC_URL = { "/*", "/api/v1/account/validate", "login/accountkit", "/api/v1/account" };

@Override
protected void configure(HttpSecurity http) throws Exception {
    // super.configure(http);
    http.authorizeRequests()
    .antMatchers(PUBLIC_URL).permitAll()
    .anyRequest().authenticated()
    .and().csrf()
    .disable()
    .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);

}

private Filter ssoFilter() {
    OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(
            "/login/accountkit");
    OAuth2ProtectedResourceDetails accountkit = accountKit();
    OAuth2RestTemplate template = new OAuth2RestTemplate(accountkit, oauth2ClientContext);
    filter.setRestTemplate(template);
    UserInfoTokenServices userInfo = new UserInfoTokenServices(accountKitResource().getUserInfoUri(),
            accountkit.getClientId());
    userInfo.setRestTemplate(template);
    filter.setTokenServices(userInfo);
    return filter;
}

@Bean
@ConfigurationProperties("accountkit.client")
protected OAuth2ProtectedResourceDetails accountKit() {
    AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
    resource.setAccessTokenUri("https://graph.accountkit.com/v1.2/me");
    resource.setUserAuthorizationUri("https://graph.accountkit.com/v1.2/access_token");
    resource.setClientId("AA|xxxx|xxx");
    resource.setGrantType("authorization_code");
    resource.setTokenName("access_token");
    resource.setAuthenticationScheme(AuthenticationScheme.form);
    resource.setPreEstablishedRedirectUri("http://localhost:8080/login/accountkit");
    return resource;
}

@Bean
@ConfigurationProperties("accountkit.resource")
protected ResourceServerProperties accountKitResource() {
    return new ResourceServerProperties();
}

}

Jega
  • 696
  • 7
  • 17

0 Answers0