2013-11-23 5 views
2

Я хочу, чтобы аутентифицировать пользователей на моем сайте через facebook/twitter accounts. Но весенними примерами весна попросит меня сначала войти в систему, и только после этого, когда пользователь уже имеет роль, я могу подключиться к facebook и получить некоторые данные. Даже если на контроллере facebookData нет разрешений (intercept-url pattern="/**" access="permitAll"), весна перенаправляет меня на страницу входа.Аутентификация с весной oAuth2.0

  • Означает ли это, что OpenAuth не может использоваться для аутентификации anonymouse user?

Моя весна-безопасности:

<http use-expressions="true"> 
     <form-login login-page="/login" /> 
     <intercept-url pattern="/**" access="permitAll" /> 
     <logout /> 
     <custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER" /> 
    </http> 
    <oauth:client id="oauth2ClientFilter" /> 

<oauth:resource id="facebook" type="authorization_code" client-id="..." client-secret="..." authentication-scheme="query" 
    access-token-uri="https://graph.facebook.com/oauth/access_token" user-authorization-uri="https://www.facebook.com/dialog/oauth" token-name="oauth_token" client-authentication-scheme="form" scope="email"/> 

<bean id="facebookController" class="org.springframework.security.oauth.examples.tonr.mvc.FacebookController" /> 

<oauth:rest-template resource="facebook" id="fasebookRestTemplate"> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
       <property name="supportedMediaTypes"> 
        <list> 
         <bean class="org.springframework.http.MediaType"> 
          <!--facebook sends its json as text/javascript for some reason --> 
          <constructor-arg value="text" /> 
          <constructor-arg value="javascript" /> 
         </bean> 
         <bean class="org.springframework.http.MediaType"> 
          <constructor-arg value="application" /> 
          <constructor-arg value="json" /> 
         </bean> 
        </list> 
       </property> 
      </bean> 
     </list> 
    </property> 
</oauth:rest-template> 

И контроллер facebook:

@Autowired 
private RestOperations facebookRestTemplate; 

@RequestMapping("/facebook/info") 
public String photos(Model model) throws Exception { 

    ObjectNode resultNode = facebookRestTemplate.getForObject("https://graph.facebook.com/me/friends", ObjectNode.class); 
    ArrayNode data = (ArrayNode) resultNode.get("data"); 
    ArrayList<String> friends = new ArrayList<String>(); 
    for (JsonNode dataNode : data) { 
     friends.add(dataNode.get("name").getTextValue()); 
    } 
    model.addAttribute("friends", friends); 
    return "facebook"; 
} 

ответ

1

Существует прохладная библиотека, которая делает именно это: https://github.com/socialsignin/spring-social-security

Я успешно использовал это - все, что нужно сделать пользователю, - это подключиться к Facebook, чтобы получить аутентификацию. Чтобы создать нового пользователя при первом подключении, вы просто расширяете SpringSocialSecurityConnectionSignUp, переопределяя метод execute. На странице Github хорошо объясняется, что вам нужно делать. В нем также есть несколько примеров проектов, которые действительно полезны.

Проект находится в Maven. Повеселись!

+0

Спасибо, но я планирую подключиться не только к facebook и twitter, так как я нашел ответ здесь http://forum.spring.io/forum/spring-projects/security/oauth/121682-authentication-is-required -в-получить-ан-доступ-токен-анонимные не разрешенные – user1406196

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