본문 바로가기
개발/스프링 FIreBase Neo4j

Spring boot 3 WebFlux Google OAuth2 재도전기

by 꿈트리꿈트리 2023. 2. 1.

첫 번째 도전

이전 글에서 spring webflux에 google login 창을 띄우고 OAuth2를 이용하려 했으나 실패했다.

UI까지 띄우고 리디렉션 페이지로 이동하는 것은 성공하였으나 코드 같은 정보를 어디서 가져오는지 도통 알 수가 없었다.

첫 시도는 실패 하였고. 스프링에서 기본적으로 만들어 넣으 샘플이 있다고 하여 재 도전을 해 보려 합니다.

 

https://devkimchi.tistory.com/73

 

SPRING WEBFLUX OAUTH 2.0 구글 로그인 후 넘어 오는 값(CODE) 방황기

이전 포스팅에서 프런트 페이지에 구글 로그인을 띄우는 것을 다루었다. 이제 로그인이 성공한 후에 제공업체에서 가져온 값을 처리하는 로직을 만들 것이다. 흐름은 알겠는데 로그인 완료 후 j

devkimchi.tistory.com

코드를 받아서 토큰을 처리 하고 싶었으나 코드를 주지 않은 예제.

 

 

https://docs.spring.io/spring-security/reference/reactive/oauth2/login/core.html

Spring Boot 2.x Sample list

분명 공식 홈페이지에 샘플 코드가 있는 것처럼 보이나 들어가 보면 

404 return view

404페이지가 뜬가 제가 만드는 시점에 새로 만들고 있는것인지 문제가 있어서 내린 것인지 모르겠네요.

스프링 3버전을 사용 중이고 시큐리티 쪽 문서를 타고 들어온 것인데 스프링 3에 맞는 버전을 만들고 있는 것인지 아니면 제가 사용하기 시기상조인 시기에 있는 것인지.

완성돼서 돌아가는 샘플은 스킵하고 위에 링크해둔 문서의 아래쪽에 부분 예제들을 보며 시도해 봅니다.

 

문서 내용 참조 하며 해보기

  • 자바스크립트단에서 signInSuccessUrl 을 스프링에서 기본으로 제공된다는 주소로 변경합니다.
    var uiConfig = {        
            signInSuccessUrl: '/login/oauth2/code/google',
  •  

승인 리디렉션 재설정

  • security config에도 oatuh2 login을 활성화시켜 주고

@Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity httpSecurity) {
        httpSecurity
                . securityMatcher(new PathPatternParserServerWebExchangeMatcher("/manage/admin"))
                .authorizeExchange(
                        exchanges -> exchanges.anyExchange().authenticated()
                )

                .httpBasic().disable()
                .formLogin().disable()
                .csrf().disable()
                .oauth2Login(Customizer.withDefaults())

//                .httpBasic().disable()
        ;
        return httpSecurity.build();
    }

 

  • application.yml 부분도 수정해 줍니다.

oauth2:
      client:
        registration:
          google:
            client-id: {id}
            client-secret: {secrete}
            scope: profile, email

 

이렇게 해주고 돌려보면 404가 뜨네요 oauth2에 맞게 자동적으로 구현된 줄 알았으나 또 먼 설정이 빠진 건지 잘못 코딩한 것인지 404 에러를 뿌려 주네요 ㅠㅠ

Whitelabel Error Page

This application has no configured error view, so you are seeing this as a fallback.

Wed Feb 01 12:45:35 KST 2023
[5a9152ff-5] There was an unexpected error (type=Not Found, status=404).
org.springframework.web.server.ResponseStatusException: 404 NOT_FOUND at org.springframework.web.reactive.resource.ResourceWebHandler.lambda$handle$1(ResourceWebHandler.java:405) Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: Error has been observed at the following site(s): *__checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.web.filter.reactive.ServerHttpObservationFilter [DefaultWebFilterChain] *__checkpoint ⇢ HTTP GET "/login/oauth2/code/google" [ExceptionHandlingWebHandler] Original Stack Trace: at org.springframework.web.reactive.resource.ResourceWebHandler.lambda$handle$1(ResourceWebHandler.java:405)
샘플 소스도 404 내 소스도 404 707 특수 구조대를 부르고 싶네요
리턴을 /login/oauth2/code/google 잘 던지는거 같긴 한데  이곳으로 주면 자동으로 구현된 코드가 작동될줄 알았으나 찾지를 못하네요 원인을 찾아 보겠습니다.
 
spring-security release version

깃헙에 보면 6.0대 릴리즈가 있는 거 같으나 클릭하고 들어가 보면

아직 포함하고 있지 않다고 나오니 내가 너무 이르게 사용하는 건가 5.8 버전을 써야 하나 심히 고민이 됩니다.

5.8을 쓰면 thymeleaf가 미구현된 게 있을 거 같고 6.0은 샘플이 아직 안 보이니 고민이 됩니다. 

 스프링 current는 6.0이고 이전 단계를 써야 하나 하는 의문이 전에 웹플러스 초기에 thymeleaf에 미구현된 게 많아서 고생했던 거 같은데 sec태그가 안 되는 것이 많아서. 

현재 버전 표기

흠 Firebase UI를 사용하지 말고 REST 방식으로 전송을 던져서 주고받아야 하나 이번에는 REST로 직접 쏘고 받는 방법으로 한번 도전해 보겠습니다. 제가 알고 있는 지식선에선 간단하게 작동이 되지 않네요.

spring boot 3.0.2를 사용 중이었는데 OAuth2에 대한 샘플도 없고 하니 일단은 부트 2.7.8 버전으로 OAuth2를 적용해 보고 나중에 예제들이 좀 나오면 그때 다시 도전해 봐야겠습니다.