[OAuth2.0] 자동 회원가입 구현 시 발생한 문제 트러블슈팅

Frog Lemon·2025년 1월 2일
0

트러블 슈팅

목록 보기
2/2
post-thumbnail

서론

SpringSecurity 및 JWT 강의를 보며 소셜로그인을 구현중이였다.
우선 강의 내용을 실습을 통해 구현해보고, 현재 진행 중이던 팀프로젝트에 적용하면서 생겼던 문제들을 분석하고 해결했던 과정을 기록하고자 한다.


민감정보가 담긴 yml 파일 관리

이슈:

구글,네이버,카카오등 클라이언트 정보등이 담긴 민감정보를 깃에 안올리면서 팀원들과 공유하는 방법이 필요

해결 방안:

  • gitignore 파일에 yml 파일을 추가하여 Git에 포함되지 않도록 설정.

  • 팀원 간 수동으로 yml 파일을 공유하고 로컬 환경에서 배포.

    매번 수동으로 yml파일을 관리하는 것은 비효율 적으로 생각했고,우리 팀은 서브모듈을 활용하여 yml파일을 관리하는 private repository를 하나 개설하였다. 이 외에도 환경변수로 파일을 관리하는 방법등이 있다고 들어 추후 공부할 예정이다.


OAuth2.0 Client_id공유로 인한 에러

이슈:

  • 실습에 썼던 구글,네이버,카카오의 애플리케이션의 Client_Id와 Client_Secret 설정을 프로젝트에도 동일하게 사용하였더니 에러가 발생했다. 이유를 몰라 많이 곤란한 문제였다.
  • 소셜로그인 창으로 이동하지 않는다.
  • 콘솔에도 에러 원인이 나오지 않는다.

해결방안:

  • 프로젝트마다 각 소셜 플랫폼의 애플리케이션을 새로 설정해준다.

💡궁금점:

2개의 프로젝트에서 동일한 리디렉션 url을 설정 한다면, OAuth에서는 동일한 프로젝트로 인식하고 처리해주지 않을까 싶었던 것이 나의 생각이였다. 하지만 생각과 달리 에러가 발생하였고,
해당 이유를 추후에 공부하여 정리해야겠다.


스프링 시큐리티 설정 에러

이슈:

  • 구글,네이버,카카오로 나뉜 로그인 설정을 구현하기 위해 .oauth2Login()을 여러번 사용하여 해결하고자 했으나 에러가 발생하였다.
  • 404에러, 회원가입이 되지 않는등 다양한 에러가 발생하였다.
  • 콘솔 로그에서도 나오지 명확한 에러 원인을 찾지 못했었다.

[기존코드]

.oauth2Login(oauth -> oauth
                        .loginProcessingUrl("/login/oauth2/code/google")  // 구글 로그인 URL 처리
                        .userInfoEndpoint(userinfo -> userinfo
                                .userService(principalOauth2UserService)))

 .oauth2Login(oauth -> oauth
                        .loginProcessingUrl("/login/oauth2/code/naver")  // 네이버 로그인 URL 처리
                        .userInfoEndpoint(userinfo -> userinfo
                                .userService(principalOauth2UserService)))

.oauth2Login(oauth -> oauth
                        .loginProcessingUrl("/login/oauth2/code/kakao")  // 카카오 로그인 URL 처리
                        .userInfoEndpoint(userinfo -> userinfo
                                .userService(principalOauth2UserService)))

해결방안:

  • 핵심은 .oauth2Login() 메서드가 중복 호출될 때 발생하는 구성 충돌이라고 한다. Spring Security에서 .oauth2Login()은 OAuth2 로그인 흐름을 정의하는 메서드이다. 그러나 이 메서드는 한 번만 호출되어야 하고, 모든 OAuth2 프로바이더를 통합적으로 처리해야 한다.
  • loginProcessingUrl 설정 통합:
    각 소셜 로그인별 loginProcessingUrl을 하나로 통합하고, {registrationId}를 사용하여 각 소셜 로그인에 맞게 처리하도록 했다. Spring Security는 {registrationId} 값을 자동으로 채워주기 때문에, 개별 로그인 경로를 지정할 필요는 없다.
        .oauth2Login(oauth -> oauth
                        .userInfoEndpoint(userinfo -> userinfo
                                .userService(principalOauth2UserService))  // PrincipalOauth2UserService 사용

                        // 각 소셜 로그인 경로에 대해 공통으로 처리
                        .loginProcessingUrl("/login/oauth2/code/{registrationId}")  // Spring Security가 자동으로 {registrationId}에 해당하는 로그인 URL 처리
                        .defaultSuccessUrl("/home", true)  // 로그인 후 리디렉션되는 페이지

                )
profile
노력과 끈기를 추구합니다. 레몬이 좋아!

0개의 댓글