2015-01-27 1 views
0

내 응용 프로그램은 서비스에 대한 REST API를 공개하고 SpringSecurity를 ​​사용하여 개인 서비스에서 로그인을 관리합니다. 사용자 정의 가입 및 로그인에는 어떤 종류의 문제도 없지만 이제는 페이스 북이나 트위터로 로그인/가입을 구현하려고합니다.이 작업을 수행하는 방법을 모르겠습니다.스프링 보안 및 휴식과 사회적인 SignUp

누구나 동일한 문제가 있었지만 해결 되었습니까?

페이스 북과 트위터 계정에 "매우 긴"맞춤 암호를 사용하려고했지만 작동하지 않았습니다.

업데이트

해결책을 시도했지만 오류가 발생합니다. 이것은 내 코드입니다

public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException { 
     ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
     if (ConstantPWCabinet.SOCIAL_LOGIN_FACEBOOK.equalsIgnoreCase(attr.getRequest().getParameter(ConstantPWCabinet.LOGIN_TYPE))) { 
      User facebookInfo = dao.getFacebookInfo(new FacebookTemplate(attr.getRequest().getParameter(ConstantPWCabinet.FACEBOOK_TOKEN))); 
      List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
      authorities.add(new SimpleGrantedAuthority(Role.ROLE_USER_FACEBOOK.toString())); 
      org.springframework.security.core.userdetails.User user = new org.springframework.security.core.userdetails.User(facebookInfo.getEmail(), null, authorities); 
      Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()); 
      SecurityContextHolder.getContext().setAuthentication(auth); 

      return user; 

     } 

     logger.debug("Mail di accesso: " + mail); 
     User user = dao.getUserSelectedMail(mail); 
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
     String role = user.getRole().toString(); 
     if (StringUtils.isEmpty(role)) 
      authorities.add(new SimpleGrantedAuthority(Role.ROLE_USER.toString())); 
     else 
      authorities.add(new SimpleGrantedAuthority(role)); 
     return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), authorities); 
    } 

하지만 "Bad credential"이 표시되고 로그인하지 않습니다.

+0

[스프링 사회 문서] (http://projects.spring.io/spring-social/) 및 예제를 보았습니까? 설정/코드의 예를 제공하면 유용한 응답을받을 확률이 높아질 수 있습니다. – eebbesen

+0

나는 사회에서 정보를 복구하는 데 문제가 없습니다. 내 문제는 사회적 인증입니다. 암호가 없으면 어떻게 로그인합니까? 좋아, 토큰을 사용하지만 j_spring_security_check에 해당하는 것은 무엇입니까? 그리고 어떻게 'public UserDetails loadUserByUsername (String mail)을 쓰는지 UsernameNotFoundException'을 던졌습니다. – Zaknafein

답변

1
  1. 당신은 j_spring_security_check
  2. 필터 인증 객체를 생성 URL로 수신 및 공급자를 인증하기 위해 보내는 AuthenticationFilter 있습니다.
  3. AuthenticationProvider는 UserDetailsService를 호출하여 사용자 이름별로 사용자를로드하고 사용자를 인증합니다.
  4. 그런 다음 공급자는 공급자가 반환 한 인증 개체를 확인하고 성공/실패 처리기로 요청을 보냅니다.

소셜 미디어를 통해 수행 할 경우 외부 소스에 의해 사용자가 인증되므로 사용자를 마지막으로 인증 할 필요가 없습니다.

당신은 간단한

// 사용자

UserDetails user = userDetailsService.loadUserByUsername(username); 
Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()); 
SecurityContextHolder.getContext().setAuthentication(auth); 

이 암호없이 사용자를 인증한다을 인증 할 수 있습니다.

+0

좋습니다, 정말 고마워요. – Zaknafein