Coding History/Team Project

팀플) 자동배포(무중단) 이후 구글 로그인 정상화

BlackBirdIT 2024. 12. 9. 06:23

결론부터 말하자면 고쳤다.

문제의 원인

그래서 원인이 뭐였냐?

백엔드가 https를 못알아먹는다. -> 이에 대한 설정을 추가함.
그래도 안된다. -> 강제로 설정할 수 있게끔함.

간단하게 말하면 이렇게 고쳤음.

제일 처음엔 구글콘솔에 등록 하지 않은 줄 알았다. 그래서 가보니까 되어있네?
그럼 뭐가 문제일까 싶어서 로그인 창을 보니까 개발자가 볼 수 있게 문제가 뭔지 보여주는 곳에서
400 에러를 명시해주고 로그인 버튼을 눌렀을 때 나온 url을 보여주는데 여기서 http://<my-url>/google/login/url뭐 이런식으로 되어있었음. 그러니까 난 nginx 초기 설정을 할 때 https 에 대한 설정을 끝냈는데 이상하게 로그인 버튼을 클릭하면 그게 해체가 된거.

그래서 원인은 url이 이상하다. 였다.


그래서 우째 고침?

고친 방법을 순서대로 읊어보면 우선 nginx에서 https 에 대한 설정을 바르게 해놨는데 그게 제대로 먹히지 않았나?
싶어서 서버 컴퓨터 nginx 이미지 내부로 들어가서 nginx.conf 파일을 까보고 설정이 제대로 되어있나 확인을 했고, 보니까 잘 되어있었다.

-> 그럼 프론트의 설정 url이 잘못되었나? 싶어서 좀 까봤는데 아무리 생각해도 딱히 잘못된건 없는 것 같아서 좀 알아보니까
백엔드는 https를 못알아먹어서 이걸 설정을 따로 해줘야한다고 하더라고,

spring:
  forward-headers-strategy: native

그래서 이걸 추가해 줬음. 그리고 테스트 해봤는데 안됨.

그래서 다음으로는 시큐리티에서 로그인 url을 만들 때를 살펴보자 싶어서,

의존성 org.springframework.boot:spring-boot-starter-oauth2-client 추가후 시큐리티 필터체인, OAuth2로그인 단계에서 설정을 좀 해줌.

.oauth2Login(oauth2 -> oauth2
    .loginPage(baseUrl + "/react/login") // 로그인 페이지 설정
    .successHandler(oAuth2AuthenticationSuccessHandler)
    .failureHandler(customOAuth2FailureHandler)
    .authorizationEndpoint(authorizationEndpoint ->
        authorizationEndpoint.authorizationRequestResolver(
        new CustomAuthorizationRequestResolver(clientRegistrationRepository, baseUrl)
        )
    )
    .userInfoEndpoint(userInfoEndpoint ->
    userInfoEndpoint.userService(customOAuth2UserService)
    )
)

이렇게 설정을 했고 CustomAuthorizationRequestResolver가 새롭게 추가가 됐음. 그냥 갖다 쓰려고 했는데 안되서 커스텀으로 만들었음.

그래서 저게 뭘 하는거냐면

주요 구성 요소 및 역할

  1. DefaultOAuth2AuthorizationRequestResolver:
    • Spring Security에서 기본적으로 제공하는 OAuth2 인증 요청 생성기.
    • /oauth2/authorization/{registrationId} 경로로 들어오는 요청을 처리하여 OAuth2AuthorizationRequest를 생성합니다.
    • 기본적으로 redirect-uri는 Spring Security의 내부 설정에 따라 자동 생성됩니다.
  2. CustomAuthorizationRequestResolver:
    • OAuth2AuthorizationRequestResolver를 구현하여 Spring Security의 기본 동작을 커스터마이징.
    • DefaultOAuth2AuthorizationRequestResolver를 감싸는 형태로 사용.
    • redirect-uri를 명시적으로 설정하거나 수정하는 역할을 수행.
  3. resolve 메서드:
    • HTTP 요청을 받아 OAuth2AuthorizationRequest 객체를 생성.
    • customizeAuthorizationRequest 메서드를 호출하여 redirect-uri를 설정합니다.
  4. customizeAuthorizationRequest 메서드:
    • OAuth2AuthorizationRequest 객체를 받아, 새로운 redirect-uri를 추가로 설정.
    • 기존 요청(request)의 정보를 유지하면서, redirect-uri만 변경.
    • 변경된 redirect-uri는 Google로 전달.
  5. Security 설정 내 authorizationRequestResolver:
    • Spring Security의 OAuth2 로그인 과정에서 인증 요청 생성을 담당.
    • 커스텀 리졸버(CustomAuthorizationRequestResolver)를 설정함으로써, 기본 동작을 대체.

이렇다..

여튼 구글 로그인 정상화.


별게로 사이트 로그인 해보니까 약간 공들여서 만든 알람 같은게 조금 고장이 나있긴한데 그래도 만족스럽다.

토큰도 정상작동해서 감격스러움 ㅠㅠ

정보 저장도 잘 되고,

즐겨찾기 설정도 잘 되고,

즐겨찾기 기준으로 날씨 요청도 잘 한다.

직접 요청해도 잘 됨.

뭐 기능에 문제가 있다거나 하는 부분은 없다.

여튼 진짜 배포로직도 끝이다 자동화까지 되어있으니,

오늘 이제 학원가서 develop 브랜치로 병합 이후에 staging 브랜치로 옮기고 코드 수정 이후 재배포 하면 찐막임. 발표 준비에 힘쓰면 될듯.