구글 소셜 로그인 구현 중 삽질 기록

CHOI YUN HO·2022년 9월 22일
0

SW Maestro

목록 보기
6/13

소프트웨어 마에스트로에서 "온라인 강의 큐레이션 서비스 - curady"를 개발하며 생긴 일

구글(Google) 소셜 로그인 에러..

구글 로그인을 위한 각종 설정을 모두 잘 해주었고, redirect_uri도 몇번을 확인했다.
그러나 구글 서버로 oauth 토큰 요청을 보냈을 때 에러가 발생했다.

"malformed auth code" error
흉측한 코드????

위 에러에 대해 찾아보니,
구글 로그인 api는 인증 과정에서 요청 간 인증코드를 변경한다.

토큰을 얻기 위한 첫 번째 요청에 대해서 구글은 정상적인 문자열을 반환하지만

n번째 요청(취소되지 않은 경우) 에는 인증 코드를 url-encoded로 반환한다.
내 경우에는 '%4F'가 붙어서 왔다.

문제는 구글 API의 작동 방식에 대한 오해였다.

그래서

항상 URL-인증 코드를 액세스 토큰으로 교환하기 전에 디코딩 해주는 작업이 필요했다.
아래와 같이 수정해서 문제를 해결했다.

public OAuthRequest getRequest(String code, String provider) {
        LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        if (provider.equals("kakao")) {
            map.add("grant_type", "authorization_code");
            map.add("client_id", kakaoInfo.getKakaoClientId());
            map.add("redirect_uri", kakaoInfo.getKakaoRedirect());
            map.add("code", code);

            return new OAuthRequest(kakaoInfo.getKakaoTokenUrl(), map);

        } else {
            map.add("grant_type", "authorization_code");
            map.add("client_id", googleInfo.getGoogleClientId());
            map.add("client_secret", googleInfo.getGoogleClientSecret());
            map.add("redirect_uri", googleInfo.getGoogleRedirect());
            // 디코딩 !!
            map.add("code", java.net.URLDecoder.decode(code, StandardCharsets.UTF_8));

            return new OAuthRequest(googleInfo.getGoogleTokenUrl(), map);
        }
profile
가재같은 사람

0개의 댓글