2016-05-03 4 views
-1

В моем проекте я пытаюсь выполнить аутентификацию пользователя с помощью instagram. Этот проект работает на spring-boot с spring-security-oauth2. На этапе аутентификации я получаю из instagram code, который отправляется на instagram для извлечения access_token. Вместо access_token Я получаю сообщение с плохим ответом с сообщением: «Вы должны предоставить client_id».Spring boot with oAuth2 OauthException: «Вы должны предоставить client_id»

WebSecurityConfig.class

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
      .antMatcher("/**") 
      .authorizeRequests() 
      .antMatchers("/", "/index**", "/login/**", "/webjars/**", "/js/**", "/css/**", "/images/**") 
      .permitAll() 
      .anyRequest() 
      .authenticated() 
      .and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/")) 
      .and().logout().logoutSuccessUrl("/").permitAll() 
      .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class) 
      .addFilterBefore(ssoFilter(instagram(), "/login"), BasicAuthenticationFilter.class); 
} 
@Bean 
@ConfigurationProperties("instagram") 
ClientResources instagram() { 
    return new ClientResources(); 
} 

private Filter ssoFilter(ClientResources client, String path) { 
    OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(path) { 

    }; 
    OAuth2RestTemplate filterTemplate = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext); 
    filter.setRestTemplate(filterTemplate); 
    filter.setTokenServices(new UserInfoTokenServices(client.getResource().getUserInfoUri(), 
                   client.getClient().getClientId())); 
    return filter; 
} 

application.properties

instagram.client.clientId=df5cc67d71e04b1b9a89ca9e1572a801 
instagram.client.clientSecret=8da04f4072a54579ae4e334d5e865fa4 
instagram.client.accessTokenUri=https://api.instagram.com/oauth/access_token 
instagram.client.userAuthorizationUri=https://api.instagram.com/oauth/authorize 
instagram.client.scope=basic, likes, comments, relationships 
instagram.resource.userInfoUri=https://api.instagram.com/v1/users/self 

Here является то, что проект на GitHub. Проект для образовательных целей, так что здесь открыты клиентский клиент и клиентский ключ. Спасибо за любой совет, как заранее решить это досадное исключение

ответ

-1

В OAuth2 есть несколько потоков, в которых мы можем выполнять гранты для аутентификации. Поток, который вы выбрали, - это поток кода авторизации.

В потоке кода авторитизации сервер авторизации возвращает код авторизации пользовательскому агенту (браузеру). Затем Браузер отправляет этот код обратно на сервер ресурсов (код Api, запущенный на сервере). Затем сервер обменивает этот код вместе с идентификатором клиента и секретным ключом клиента для access_token.

Идентификатор и секрет клиента являются конфиденциальными, поэтому неявный поток рекомендуется использовать при использовании OAuth2 в приложениях на основе Javascript. В этом потоке сервер автозавершения отвечает с помощью access_token вместо кода авторизации.

Пожалуйста, дайте мне знать, если это будет полезно или у вас возникнут другие вопросы.

Спасибо, Сома.

+0

Я не вижу здесь никакой полезной информации. Явный поток кода использовался, и он не работал. – Solorad

+0

Я не вижу вызова для access_token с client_id, client_secret и кода доступа –

+0

, потому что spring-oauth делает все, что для меня. Проблема заключается в последнем шаге аутентификации. Я вижу, вы не понимаете мой вопрос, и ваш ответ - это просто копировать-вставить из какой-либо документации. – Solorad

Смежные вопросы