[Spring Boot] 구글 로그인 Oauth 관련 "Malformed auth code."<EOL> 에러❌

송하연·2025년 2월 16일
0

스프링부트🌱

목록 보기
9/9

🚨 1. 오류 상황

구글 로그인 OAuth 토큰을 발급받기 위해 요청을 보냈을 때, 400 Bad Request와 함께 Malformed auth code 오류가 발생했다.

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request on POST request for "https://oauth2.googleapis.com/token": "{ "error": "invalid_grant", "error_description": "Malformed auth code."}"

"Malformed auth code." → 인가 코드가 올바르지 않거나 변형된 경우 발생하는 오류

작년에 구글 로그인 구현했을 때는 문제없이 동작했는데 기존 코드를 그대로 썼음에도 Google의 API 관련 정책 변경 되었는지 갑자기 해당 에러가 발생하였다.

🔍 2. 원인 분석

구글 OAuth 인가 코드(=code)가 URL에 포함될 때, URL 인코딩이 제대로 처리되지 않으면 이 오류가 발생할 수 있다.

예시)
http://localhost:5173/auth/callback?code=4%2F0AQSTgQHKPuDKtCHITsfZGxC-xjHyTPpIAuRhMmR8t-3zpJR5axc8FPafOffSStZ9S3FrLw&scope=email+profile+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&authuser=0&prompt=consent

  • OAuth 인증 과정에서 구글에서 반환한 code 값은 URL 인코딩된 형태로 전달
  • 이 값은 percent-encoding 방식으로 특수 문자를 처리하는데, 예를 들어 /%2F로 인코딩

위와 같이 code에서 %2F와 같은 URL 인코딩 값이 제대로 처리되지 않으면, 구글 서버에서 이를 변형된 코드로 간주하여 Malformed auth code 오류가 발생할 수 있다.

💡 3. 해결 방안

이 문제를 해결하기 위해 인코딩된 값 (%2F 등)을 원래대로 복원하려면, 디코딩을 해줘야 한다.

따라서, URLDecoder.decode(code, StandardCharsets.UTF_8)로 인가코드(=code)가 URL 인코딩된 값을 디코딩하는 과정을 추가해주었다.

String decodedCode = URLDecoder.decode(code, StandardCharsets.UTF_8); //구글 로그인 인가코드 인코딩 관련 오류 방지 (%2F -> /)

이렇게 하니 Oauth 토큰이 정상적으로 처리될 수 있었다‼️

요약

  1. OAuth 토큰 요청 시 Malformed auth code 오류가 발생하는 이유는 인가 코드가 URL 인코딩 처리되지 않았기 때문
  2. URLDecoder.decode() 메서드를 사용하여 인가 코드를 디코딩해서 처리
profile
개발 기록 끄적끄적✏️ #백엔드개발자

0개의 댓글

관련 채용 정보