오늘은 구글 로그인으로 회원 정보를 받아올 것이다.
1. SecurityConfig 설정
// SecurityConfig.java
// [추가 1]
@Autowired
private PrincipalOauth2UserService principalOauth2UserService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/loginForm")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/")
.and()
.oauth2Login()
.loginPage("/loginForm")
.userInfoEndpoint() // [추가 2]
.userService(principalOauth2UserService); // [추가 3]
}
2. PrincipalOAuth2UserService 추가
// config/oauth/PrincipalOAuth2UserService.java
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
// 구글로부터 받은 userRequest 데이터에 대한 후처리 하는 함수
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
System.out.println("userRequest : " + userRequest);
System.out.println("getClientRegistration : " + userRequest.getClientRegistration());
System.out.println("getAccessToken : " + userRequest.getAccessToken().getTokenValue());
System.out.println("getAttributes : " + super.loadUser(userRequest).getAttributes());
return super.loadUser(userRequest);
}
}
※ loadUser 뜯어보기
1 ) userRequest.getClientRegistration
어떤 OAuth로 로그인했는지 확인 가능 ( registrationId='google' )
2 ) super.loadUser(userRequest).getAttributes( )
sub : Google상의 사용자 번호
name : 사용자 이름
picture : 프로필 사진 url
emal : 사용자 이메일
....
3. Flow
구글 로그인 버튼 클릭 → 구글 로그인 창 등장 → 로그인 완료 → code 리턴 → OAuth-Client 라이브러리가 code 받음 → code가지고 AccessToken 요청 → UserRequest 정보 → loadUser 메소드 → 구글로부터 회원 프로필 가져오기
'Spring > Spring Boot' 카테고리의 다른 글
[Spring boot - OAuth2] Naver Login 구현 #2 (0) | 2023.03.04 |
---|---|
[Spring boot - OAuth2] Naver Login 구현 #1 (0) | 2023.03.04 |
[Spring boot - OAuth2] Google Login 구현 #1 (0) | 2023.02.02 |
[Spring Boot | 삽질] H2 Database (User Table) (0) | 2023.01.20 |
[Spring boot - OAuth2] Kakao Login 구현 #04 (0) | 2022.11.21 |