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

Sprng Boot 2.7.8 Reactive WebOAuth2 Google Login 적용해 보기 간단 해결기

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

Sprng Boot 2.7.8을 이용 Reactive Web에 OAuth2를 이용해 Google Login을 붙여 볼 예정이다.

이전 시도에서 스프링부트 3.0.0 이용하여 실패했는데 소스도 별로 없고 글도 없어서 아직 이른가 보다라는 판단에 이전 버전에서 테스트를 해보고 Spring Security를 좀 이해하게 되면 버전을 높여서 해볼 생각입니다.

최신 버전에선 시행착오도 많았는데 결국엔 실패 했고 안전하게 너무 최신은 거르고 바로 전 버전으로 하는 것이 정신 건강에 이롭지 않을까 하여 다시 시도해 봅니다

https://devkimchi.tistory.com/74

 

Spring boot 3 WebFlux Google OAuth2 재도전기

첫 번째 도전 이전 글에서 spring webflux에 google login 창을 띄우고 OAuth2를 이용하려 했으나 실패했다. UI까지 띄우고 리디렉션 페이지로 이동하는 것은 성공하였으나 코드 같은 정보를 어디서 가져

devkimchi.tistory.com

 

 

 

과감히 최신 버전은 건너뛰고 그 아래 버전으로 도전 시도!

새 모듈 추가
Spring Boot 버전 설정 2.7.8 과 종속성 추가

선배들이 최신버전을 꺼리는 이유를 이제는 알거 같다. 하다가 실패하면 해본 사람이 적기 때문에 물어볼 곳이 거의 없다.

시간이 여유가 있으면 상관이 없겠지만 애도 키우고 일도 하고 나이가 들수록 시간도 줄어드는 느낌이다. 그래서 앞으로도 스프링은 최신 버전은 건너뛰어야 할거 같다.

스프링 자체가 워낙에 라이브러리도 많고 설정도 많다보니 물론 자동 설정도 많지만 돼야 될 때 안되면 애매해진다.

spring부트 3는 스프링과 시큐리티 이거 저거 새로운 것들이 많아서 쓰고 싶었지만 조금 미뤄야겠다. 소스들과 글들이 좀 많아질 때까지.

 

 

Resource Server

리소스 서버는 구글 같은 서버라고 이해했다 처음엔 내가 리소스 서버도 다 하는 것인가 싶었는데 OAuth2를 적용해 보면서 배우게 되었다. 계정 자원을 가지고 있다 모 이런 식으로 이해했는데 틀리다면 알려 주시라 

 

Client

구글 같은 인증 자원을 가지고 있는 입장에서 보면 내가 클라이언트인 거지 첨엔 사용자가 클라이언트인가 했으나 유저나 내 서비스에 들어와서 고객정보가 있는 곳의 자원을 이용할 수 있게 허가 받는 것이니 내 서비스가 클라이언트다.

고로 종속성에 추가해 주지 않았다.

Okta도 이용해 보고 싶은데 일단 OAuth2부터 제대로 사용해 볼 생각이다.

그렇게 종속성은 저 정도로 추가하고 시작해 보련다

 

버전을 낮춰서 하니 먼가 처음의 그 패기도 약간 줄어든 느낌이다. 그냥 빨리 한방에 되었음 한다.

괜히 리액티브로 했나 싶기도 하고 서블릿웹으로 할걸 그랬나? 그러면 더 쉬웠으려나?

 

 

로그인 화면

스프링 부트 초기 화면

스프링 부트에 시큐리티 종속성만 추가해 주어도 애플리케이션 실행하면 로그인 창이 뜨도록 기본 구현 되어 있다.

물러 저기서 로그인하면 404 에러가 뜬다 만들어 놓은 페이지가 없으니 정상인 거다.

비밀번호는 콘솔창에 애플리케이션 뜰 때마다 새로 나타난다.

password

요런 식으로 긴 패스워드가 나타난다. 이번엔 OAuth2를 이용할 것이기에 가장 기초적인 OAuth2 설정만 해줘도 방금 떴던 로그인 화면이 아니라 구글 로그인 창이 나타나기를 기대해 본다.

이전 포스팅에서  https://console.cloud.google.com/apis/credentialshttps://console.cloud.google.com/apis/credentials

이곳에서 프로젝트 설정을 엄청 해놔서 화면이 궁금하신 분들은 이전 글을 보시면 도움이 될 거 같습니다.

 

 

application.properties 파일 security 설정

spring.security.oauth2.client.registration.google.client-id=<your client id>
spring.security.oauth2.client.registration.google.client-secret=<your client secret>

전엔 yaml파일 만들어서 가독성 올린다고 정성을 들였으나 무한 삽질에 지치니 수정하기도 힘들고 순정으로 돌아가게 되네요. 일단 프로파일 설정도 잘 작동되면 다듬어 주는 방향으로 갑니다.

 

 

구글 로그인 화면

바로 구글 로그인창이 떠버리는 설정

신기하게도 요번엔 client-id와 client-secret 만 설정해 주었는데 구글 로그인창이 떠버리네요.

client 정보 넣기 전에는 로그인폼이 뜨더니 클라이언트 정보를 넣어 주는 것만으로도 구글 로그인이 떠버리는 여태 전 무슨 고생을 한 건지 모르겠네요.

기존에 알고 있던 지식이 짬뽕이 되어 파이어베이스 ui를 이용해서 구글 로그인을 한 것도 엄청난 시행착오였네요 ㅠㅠ

404 페이지 에러

계정으로 로그인을 하여도 404 페이지가 뜹니다. 리다이렉션 URL 같은 것들을 이제 설정해 줘야 하나 봅니다.

다시 스프링부트 3 버전으로 새로 만들어 클라이언트 세팅만 한번 해줘보고 싶네요.

 

 

spring boot 3.0.2

다시 한번 패기 있게 3.0.2 버전에 도전해 봅니다.

종속성 추가 해주고 바로 실행하니 에러가 뜨네요 2.7.8 버전에선 Neo4j 드라이버 설정 안해줘도 떴는데 3.0.2에서 neo4j도 설정을 꼭 해줘야 하나 보네요.

Neo4j Error

Neo4j username, password 설정해 주고 구글 클라이언트 설정해 주니 그냥 바로 구글 로그인 창이 떠버리네요 이전까지 머 한 건지 멍하네요... 정말 삽질한 거네요 ㅠㅠ.

스프링 최신판에서도 디비 계정 정보와 구글 클라이언트 정보를 넣어 주니 바로 구글 로그인이 뜨네요 로그인하면 404가 뜨지만 우선 첫 루트의 페이지를 한번 넣어 보고 설정해 보겠습니다.

 

컨트롤러 등록 후 홈페이지로도 잘 이동이 됩니다 로그인도 잘 되고 

콘솔 정보

콘솔에 디버깅 모드로 데이터를 보아도 이름이나 이메일 사진등 정보가 resource server로부터 잘 받아 온 게 보이네요.

의외로 너무 간단하게 작동이 돼서 깜짝 놀랐고 여태 했던 삽질과 방황기는 먼지 신기

그냥 yml파일에 구글 api 클라이언트 넣어 주는 것만으로도 작동이 된다니 신기했습니다. 어쨌든 산하나를 넘은 느낌입니다 스스로 산을 만들어 산을 넘는 허허허

 

SPRING OAuth2 로그인 생각한 거보다 너무 간단했습니다.

저는 파이어 베이스 ui를 이용해서 하려다 보니 말도 안 되는 삽질을 하였는데 기본 스프링 프레임웍에 심플하게 만들어져 있네요 이제 이 권한등을 수정하는 것도 해야 하지만 rdb에서 인증로직 만드는 게 더 힘들 거 같네요. 인터넷이 되는 환경이라면 구글 로그인 달아서 쓰는 게 훨씬 편할 거 같습니다. 고생은 했지만 이런 게 있다는 걸 안게 다행이네요.