8. 구글 회원 프로필 정보 받아보기
by 볼빵빵오춘기OAuth 과정
일반적으로 구성은
- 코드 받는다. (= 인증 받기)
- 코드를 통해서 엑세스 토큰 받는다. (= 사용자정보에 접근할 권한을 받는다.)
- 사용자 정보를 가져온다.
- 그 정보를 토대로 회원가입을 자동으로 진행 or 추가 정보가 필요하다면 추가 정보를 받고 가입 진행한다.
SecurityConfig
구글 로그인 완료된 뒤 후처리가 필요한 상황 ⇒ 후처리 진행
구글 로그인이 완료가 되면 코드를 받는 것이 아니라 엑세서 토큰 + 사용자 프로필정보를 받는다.
@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") // login 주소가 호출이 되면 시큐리티가 낚아채서 대신 로그을 진행
.defaultSuccessUrl("/")
.and()
.oauth2Login()
.loginPage("/loginForm") // 구글 로그인이 완료된 뒤의 후처리가 필요함. Tip. 코드x, 액세스토큰+사용자정보를 한 방에
.userInfoEndpoint()
.userService(null); // Oauth2UserService 타입을 매개변수로 받아야한다. 우선은 null 로 진행
}
PrincipalOauth2UserService
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
}
SecurityConfig
@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") // login 주소가 호출이 되면 시큐리티가 낚아채서 대신 로그을 진행
.defaultSuccessUrl("/")
.and()
.oauth2Login()
.loginPage("/loginForm") // 구글 로그인이 완료된 뒤의 후처리가 필요함. Tip. 코드x, 액세스토큰+사용자정보를 한 방에
.userInfoEndpoint()
.userService(principalOauth2UserService); // Oauth2UserService 타입을 매개변수로 받아야한다. 우선은 null 로 진행
}
PrincipalOauth2UserService
- loadUser()에서 후처리가 되기에 오버라이드한다.
- Run시켜 구글로 로그인을 해보면 Sysout로 출력을 통해 어떤 정보가 받아와 지는지 확인가능하다.
- 받은 정보를 토대로 회원가입 진행하는데 이 정보를 통해서는 일반적인 사용자인지 OAuth로그인한 사용자인지 확인이 어렵다.
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
// 구글로 부터 받은 userRequest 데이터에 대한 후처리되는 함수
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
System.out.println("userRequest : "+userRequest.getClientRegistration());
System.out.println("userRequest : "+userRequest.getAccessToken().getTokenValue());
System.out.println("userRequest : "+super.loadUser(userRequest).getAttributes());
// 회원가입을 강제로 진행해 볼 예정
return super.loadUser(userRequest);
}
}
User
Oauth로그인 한 사람이면 provider 에 google, providerId에는 sub를 넣어줄것이다.
private String provider;
private String providerId;
'강의 따라하기 > Security1' 카테고리의 다른 글
10. 구글 로그인 및 자동 회원가입 진행 완료 (0) | 2024.03.20 |
---|---|
9. Authentication객체가 가질수 있는 2가지 타입 (0) | 2024.02.27 |
7. 구글 로그인 준비 (1) | 2024.02.27 |
6. 시큐리티 권한처리 (0) | 2024.02.27 |
5. 시큐리티 로그인 (0) | 2024.02.27 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기