모든 소스코드를 설명하기에는 어려우므로 개발을 진행하다 이슈가 있는 사항만 기록하였다.

Google OAuth2.0

구글 OAuth 공식문서에서 설명하는 과정대로 따라가면 쉽게 OAuth 를 구현할 수 있다. 하지만 공식문서를 참고하더라도 이해하기 어려웠던 부분들만 모아서 정리해봤다.

첫 API 요청 시 필수 설정값: include_granted_scopes

공식문서를 참고하면 복잡한 OAuth 과정을 단계별로 나누어 친절하게 설명되어 있다. 하지만 필수값들을 모두 넣어서 API 를 호출해도 에러만 응답받았다.

"Malformed auth code" 또는 "Bad Request"

공식문서에서 설명하는 모든 파라미터들의 설명을 읽어보니 선택사항 값에서 다음과 같은 설명이 있다.

include_granted_scopes: 이 매개변수의 값을 true 로 설정하고 승인 요청을 승인하면 사용자가 이전에 애플리케이션 액세스 권한을 부여한 범위도 새 액세스 토큰에 적용됩니다.

혹시나 하는 마음에 해당 값을 true 로 설정하니 200 OK 를 받을 수 있었다. 그래서 다음과 같은 결론을 내릴 수 있었다.

구글 서버로 접근하는 첫번째 API 에는 include_granted_scopes 가 true 로 설정되어 있어야 한다

그 이후의 모든 API 에는 include_granted_scopes 를 별도로 추가하지 않아도 정상동작한다.

authorization code decoding

Malformed auth code

“잘못된 형식의 코드” 에러를 응답 받을 때 원인 가능성이 있는 여러 상황 중 하나이다. 에러코드 그대로 코드의 형식이 잘못되었을 가능성이 있다. 따라서 클라이언트로부터 받은 code 를 decoding 할 경우 문제가 해결될 수 있다.

이는 구글 에러 공식문서에서도 정확하게 적혀있지 않으며 위의 경우에서도 동일하게 잘못된 형식의 코드 에러가 발생할 수 있으니, 다양한 상황에서 발생할 수 있다는 것은 인지해야 한다…

RefreshToken 설정

모든 에러를 해결하고 200 OK 를 받아도 accessToken 만 있을 뿐, refreshToken 의 값이 없을 수 있다. 다시한번 공식문서를 정독해보니 권장 값에서 다음과 같은 설명이 있다.

access_type: 사용자가 브라우저에 없을 때 애플리케이션이 액세스 토큰을 새로고침할 수 있는지 여부를 나타냅니다. 유효한 매개변수 값은 기본값인 online 와 offline 입니다.

accessToken 뿐만 아니라 refreshToken 도 받기 위해서는 access_type 의 값을 offline 으로 설정해야 한다.

kakao OAuth 2.0