OAuth 2 구글 로그인 강제로그인 시키기

Sol's·2023년 1월 16일
0

팀프로젝트

목록 보기
12/25
post-thumbnail

앞서 OAuth를 이용하여 구글로그인을 하는 방법을 알아보았습니다.

💡 하지만 아직 회원가입이 안되어있어서 이제 강제로 회원가입을 시킬것입니다.

구글 로그인이 완료된 뒤의 로직처리

  1. 코드받기 (인증이 되었다는것)
  2. 엑세스 토큰받기 (권한이 생긴다.)
  3. 사용자 프로필 정보를 가져온다.
  4. 그정보를 토대로 회원가입 자동으로 시킨다.
    4-1. 충분한 정보가 없다면 추가적 정보 요청 할 수 있다.

이번에는 4-1은 진행하지 않을것입니다.

TIP 구글 로그인이 완료되면, Code를 받는것이 아니라, AccessToken + 사용자 프로필정보를 받습니는다.

우선 프로필 정보를 받아오기 위한 위한 필터를 등록합니다.

.oauth2Login()
.loginPage("/view/v1/start")
.userInfoEndpoint()
.userService(principalOauth2UserService) //구글 로그인 완료된 후 강제로그인을 위한 과정
.and()

loadUser()

우리는 구글로그인이 될때 AccessToken과 사용자 프로필을 가져왔습니다.

이때 그 정보들을 이용해서 강제 로그인을 시킬 예정입니다.

그러기 위해서는 loadUser()를 활용해야합니다.

구글로그인을 클릭했을때의 과정

구글 로그인 클릭 -> 구글로그인창 -> 로그인 완료 -> code를 리턴(OAuth-Client라이브러리가 받음) -> AccessToken요청 -> AccessToken을 받으면 userRequest정보가 도착합니다.

userRequest를 받으면 -> 회원 프로필을 받아야 합니다.
그때 사용하는 함수가 super.loadUser(userRequest)입니다.

아래 코드를 보면 매개변수로 userRequest를 받고 받은 변수를 활용하여 super.loadUser(userRequest)함수를 호출하는것을 확인 할 수 있습니다.

즉, super.loadUser(userRequest)는 회원 프로필을 받아주는 함수입니다.

@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
        System.out.println("getClientRegistration: " + userRequest.getClientRegistration());
        System.out.println("getAccessToken: " + userRequest.getAccessToken().getTokenValue());
        System.out.println("getAttributes: " + super.loadUser(userRequest),getAttributes);
        return new super.loadUser(userRequest);
    }
}

userRequest에 AccessToken와 사용자 프로필이 담겨있습니다.
loadUser()는 userRequest를 받을 수 있는 메소드 입니다.
사실 AccessToken은 필요가 없습니다.
왜냐하면 getAttributes의 정보로 강제 회원가입을 시킬것이기 때문입니다.

userRequest에서 유저 정보를 확인해 봅시다.

  • getAttributes 정보
getAttributes: {
sub={아이디 고유 식별번호}, 
name={이름}, 
given_name={given_name}, 
picture={사진정보} 
email={이메일 정보},
email_verified=true, 
locale=ko
}
  • getClientRegistration
ClientRegistration{registrationId='google',
clientId='281243666084-ufae9driluifj5j4npfld5psgettt2pu.apps.googleusercontent.com'
...

회원가입 시나리오

이제 getAttributesgetClientRegistration 정보를 갖고 회원가입을 시킵니다.
username = google_sub식별번호
password = "원하는 값" -> 암호화하여 저장
email = email
role = ROLE_USER
provider = 구글
providerId = sub

provider, providerId를 통해 구글, 네이버, 카카오 등 어디서 로그인을 했는지 확인하기 위해 생성합니다.
getClientRegistration에서 가져온 정보를 사용합니다.

정리

자 이제 OAuth2를 이용해 강제 회원가입 시킬 시나리오를 만들어 보았습니다.

다음에는 다형성을통해 UserDetails와 OAuth2User를 받을 수 있는 방법을 소개할 예정입니다.

profile
배우고, 생각하고, 행동해라

0개의 댓글