EEYatHo 앱 깎는 이야기

JPA, Swift ) Google 로그인 클라-서버 2중 인증 - EEYatHo iOS 본문

iOS, Swift/Feature

JPA, Swift ) Google 로그인 클라-서버 2중 인증 - EEYatHo iOS

EEYatHo 2021. 2. 27. 20:27
반응형

카카오 로그인 iOS 서버 2중 인증에 이어서 구글이다.

 

[ 카카오 로그인 iOS 서버 2중 인증 글 바로가기 ]

 

iOS, Swift, SNS로그인 서버 2중 인증(카카오 로그인 iOS-서버 2중 인증)

열심히 iOS + 서버개발 인턴 하는 중. 시니어 개발자분이 말씀하시길! iOS에서 SNS 로그인으로 토큰을 받고, 서버에 넘겨주면, (토큰의 종류는 SNS마다 다름) 서버는 받은 토큰으로 SNS 서버에 유효성

eeyatho.tistory.com


[ 2. 구글 ]

 

구글은 카카오와 비슷하다.

오픈 API를 이용하여 로그인 할 때, delegate로 user를 받아오는데,

user.authentication.idToken 을 이용하면 된다.

/// 구글 로그인 버튼 클릭 -> Delegate로 이어짐
@objc func tabGoogleLogin() {
	GIDSignIn.sharedInstance()?.presentingViewController = self
	GIDSignIn.sharedInstance().signIn()
}
// 구글 로그인 Delegate
extension LoginViewController: GIDSignInDelegate {
    // 구글 ( 로그인 했을 때 실행되는 부분 )
    // user.xxx로 유저 정보 접근가능
    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
        // 구글 로그인 에러
        if let error = error { print(error); return }
        // 토큰, 이름 가져오기
        guard let accessToken = user.authentication.idToken, let name = user.profile.name else {
            print("Error : User Data Not Found"); return }

        // 로그인 리퀘스트 생성
        let signInRequest = SignInRequest(name: name, accessToken: accessToken, socialType: .google, uuid: "string")
        // 로그인 리퀘스트 발싸
        NetworkManager.singIn(request: signInRequest) { [weak self] result in
            self?.signInResultProcessor(request: signInRequest, result: result)
        }
    }

    // 구글 ( 로그아웃 햇을 때 실행되는 부분 )
    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
        // 유저가 앱에서 연결을 해제할때 수행되는 함수
        print("구글 로그아웃")
    }
}

iOS 측에서 user.authentication.idToken 을 서버에 보내는 코드다.

( 카카오와 동일한 이유로 name, uuid는 필요없다.

name은 이눔의 애플 때문에.. 아 아니 애플 만세! )

 

이를 수신한 서버는 이렇게 처리한다.

else if (socialType.equals("google")) {
	// 구글 accessToken -> 구글 토큰 유효성 확인 및 프로필 정보 얻기
	// URI 준비
	URI url = URI.create("https://oauth2.googleapis.com/tokeninfo?id_token=" + accessToken);

	// Http Request 발싸
	RestTemplate restTemplate = new RestTemplate();
	ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, String.class);

	// Json 파싱
	JsonUtil jsonUtil = new JsonUtil();
	GoogleDTO googleDTO = jsonUtil.convert(response.getBody().toString(), GoogleDTO.class);
	return SocialDTO.builder().name(googleDTO.getName()).email(googleDTO.getEmail()).build();
} else if (...) {...} 

카카오 보다 간단하다.

https://oauth2.googleapis.com/tokeninfo 에다가,

id_token 파라미터에 iOS에서 넘겨받은 토큰을 넣어서 보내면,

유저정보를 다시 얻으면서 유효성을 검증할 수 있다.

 

카카오와 마찬가지로 이때 얻은 유저정보를 가지고, 우리 서비스의 회원을 만든다.

 

다음은 대망의 애플이다.

Comments