Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class SocialTokenGranter extends AbstractTokenGranter {
- private static final String GRANT_TYPE = "facebook_social";
- GiraffeUserDetailsService giraffeUserDetailsService; // custom UserDetails service
- SocialTokenGranter(
- GiraffeUserDetailsService giraffeUserDetailsService,
- AuthorizationServerTokenServices tokenServices,
- OAuth2RequestFactory defaultOauth2RequestFactory,
- ClientDetailsService clientDetailsService) {
- super(tokenServices, clientDetailsService, defaultOauth2RequestFactory, GRANT_TYPE);
- this.giraffeUserDetailsService = giraffeUserDetailsService;
- }
- @Override
- protected OAuth2Authentication getOAuth2Authentication(ClientDetails clientDetails, TokenRequest request) {
- // retrieve social token sent by the client
- Map<String, String> parameters = request.getRequestParameters();
- String socialToken = parameters.get("social_token");
- //validate social token and receive user information from external authentication server
- String url = "https://graph.facebook.com/me?access_token=" + socialToken;
- Authentication userAuth = null;
- try {
- ResponseEntity<FacebookUserInformation> response = new RestTemplate().getForEntity(url, FacebookUserInformation.class);
- if (response.getStatusCode().is4xxClientError()) throw new GiraffeException.InvalidOrExpiredSocialToken();
- FacebookUserInformation userInformation = response.getBody();
- GiraffeUserDetails giraffeSocialUserDetails = giraffeUserDetailsService.loadOrCreateSocialUser(userInformation.getId(), userInformation.getEmail(), User.SocialProvider.FACEBOOK);
- userAuth = new UsernamePasswordAuthenticationToken(giraffeSocialUserDetails, "N/A", giraffeSocialUserDetails.getAuthorities());
- } catch (GiraffeException.InvalidOrExpiredSocialToken | GiraffeException.UnableToValidateSocialUserInformation e) {
- // log the stacktrace
- }
- return new OAuth2Authentication(request.createOAuth2Request(clientDetails), userAuth);
- }
- private static class FacebookUserInformation {
- private String id;
- private String email;
- // getters, setters, constructor
- }
- }
- private TokenGranter tokenGranter(AuthorizationServerEndpointsConfigurer endpoints) {
- List<TokenGranter> granters = new ArrayList<>(Arrays.asList(endpoints.getTokenGranter()));
- granters.add(new SocialTokenGranter(giraffeUserDetailsService, endpoints.getTokenServices(), endpoints.getOAuth2RequestFactory(), endpoints.getClientDetailsService()));
- return new CompositeTokenGranter(granters);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement