Google OAuth2.0 인증 통합 과정 중 발생한 문제

금은체리·2024년 5월 5일
0

개요:

Spring Boot 애플리케이션에서 Google OAuth2 인증을 통합하는 과정에서 여러 문제에 직면했습니다. 이러한 문제들, 문제를 해결하기 위해 진행한 단계, 그리고 최종적으로 구현한 해결책들을 작성하겠습니다.

문제 및 해결 방법:

  1. Redirect URI에서 HTTP 403 오류

    • 문제: Google OAuth2 콜백이 redirect URI 설정 오류로 인해 HTTP 403 오류를 반환했습니다.
    • 해결책: Google 개발자 콘솔에서 redirect URI를 검증하고 Spring Boot 애플리케이션에 설정된 URI(http://localhost:8080/api/auth/google-login)와 일치하도록 업데이트했습니다. 개발 및 운영 환경에서 URI가 일관되게 유지되도록 확인했습니다.
  2. 데이터베이스 저장 문제

    • 문제: Google에서 검색된 사용자 데이터가 데이터베이스에 저장되지 않았습니다.
    • 해결책: 서비스 계층에서 트랜잭션 경계를 정확하게 처리하도록 @Transactional 어노테이션을 사용하여 리팩토링하였습니다. 사용자 데이터 검색 후에 리포지토리 계층 메소드가 제대로 호출되는지 확인했습니다.
  3. 메시지 헤더에서의 불법 문자 오류

    • 문제: 액세스 토큰을 사용한 요청을 시도할 때 "Illegal character(s) in message header value" 오류가 발생했습니다.
    • 해결책: JSON 응답 파싱을 적절히 처리하고 액세스 토큰으로 요청을 보낼 때 헤더가 올바르게 설정되도록 수정했습니다. RestTemplate 커스터마이징을 통해 헤더가 올바르게 인코딩되도록 했습니다.
  4. OAuth2UserRequest 구성 문제

    • 문제: clientRegistration 변수가 올바르게 전달되지 않아 NullPointerException이 발생했습니다.
    • 해결책: clientRegistration 변수의 범위를 조정하여 필요한 곳에서 접근할 수 있도록 했으며, OAuth2UserRequest를 생성하기 전에 null 값이 아닌지 확인했습니다.
  5. Localhost와 관련된 접근 거부

    • 문제: localhost 설정을 테스트하는 동안 "access denied" 응답을 받았습니다.
    • 해결책: Google 개발자 콘솔에 localhost URL이 인증된 리디렉션 URI 목록에 추가되어 있는지 확인했습니다. 또한 서버가 지정된 포트에서 접근 가능하며 네트워크 문제가 로컬 테스트에 영향을 미치지 않는지 확인했습니다.
  6. OAuth 토큰 파싱 오류

    • 문제: Google의 응답으로부터 OAuth 토큰을 추출할 때 파싱 오류가 발생했습니다.
    • 해결책: 적절한 JSON 라이브러리를 사용하여 응답 페이로드를 처리하도록 파싱 로직을 수정했습니다. OAuth2 토큰의 올바른 처리를 위해 Spring Security의 내장 토큰 서비스를 사용했습니다.

사용된 도구:

  • Spring Security: 보안 및 인증을 구성하고 관리합니다.
  • Spring Boot: MSA 및 쉬운 구성을 위해 사용됩니다.
  • Postman: OAuth2 흐름을 시뮬레이션하고 API 엔드포인트를 테스트하는 데 사용됩니다.
  • Google Cloud Console: OAuth2 클라이언트 설정을 관리합니다.
  • IntelliJ IDEA: 개발 및 디버깅을 위해 사용하였습니다.

결론:

Google과의 OAuth2 통합 과정을 통해 내 지식의 수준을 깨닫고 얕은 학습보다 제대로 된 이해의 필요성을 느꼈습니다. 이번 문제를 해결함으로써 인증 시스템의 견고함을 높이고 사용자 경험을 원활하게 하였습니다.
또한, 마이크로서비스 환경에서 철저한 구성 관리와 꼼꼼한 테스트의 중요성을 깨달았습니다.

profile
전 체리 알러지가 있어요!

0개의 댓글