[Spring] Spring Security - OAuth2 사용해보기 (1)
Spring Security 설정에 더해 Oauth를 이용하여 구글, 네이버, 카카오 계정 로그인 설정을 하려고 한다.
일단 google 계정을 생성하기 위해 https://console.cloud.google.com/ 에 접속한다.
이미 만들어져 있어서 없긴 한데 project-** 라고 적혀있는 곳에 프로젝트 새로 만들기가 있는데 클릭하여 프로젝트를 새로 만든다.
프로젝트를 생성하고 나면 아래에 다음과 같은 화면이 있을텐데
API 및 서비스를 클릭한다. 클릭 후 진입하는 화면에서 좌측에 있는 부분에서 사용자 인증 및 정보를 클릭한다.
위쪽에 있는 + 버튼에서 Oauth 클라이언트 아이디 만들기를 클릭한다.
유형은 웹 애플리케이션으로 설정하며
기본적인 URI는 Security에서 기본으로 제공하는 /login/oauth2/code/google로 해준다. 배포용은 아니고 로컬에서 사용하기에 localhost:8080으로 해줬고, 후에는 바꿔줘야 한다.
만들기를 클릭하면 클라이언트가 생성이 되면서 id와 비밀번호를 보여주는데 이를 기억해놔야 한다.
먼저 Gradle에 dependency 설정을 하였다.
복사한 버전이 낮았는데 IDE에서 알아서 버전을 높이라는 문구가 나와 그대로 높여주었다.
그리고 더불어 application.properties(application.yml)에 아래와 같이 client id와 비밀번호를 추가할 수 있다.
위의 이미지는 google 계정에 대한 것으로 카카오와 네이버를 사용하려면 google 대신 kakao와 naver를 넣어주면 된다.
(구글과 다르게 카카오와 네이버는 추가적으로 넣어줘야 하는 기능 있음.)
client-id와 client-secret은 이전에 만들기를 클릭하고 확인할 수 있었던 클라이언트 id와 비밀번호를 넣어주면 된다.
여기서 application.properties에 그냥 넣어주면 안되기에 application-oauth.properties를 resource 폴더 하위에 새로 생성한다.
위에 설정한 것들을 이 파일에 추가해주고 application.properties에서는 다음과 같이 추가하여
#OAuth
spring.profiles.include=oauth
application-oauth에 있는 설정을 사용할 수 있도록 한다.
이렇게 설정한 뒤 .gitignore에 application-oauth.properties를 추가해준다.
이렇게 하면 Oauth와 관련한 기능을 사용할 수 있다. 나아가 작성했던 코드를 하나씩 정리해 보겠다.
제일 첫번째로는 SpringSecurityConfig 파일에 configure()에서 작성한 부분에 OauthLogin() 메소드를 추가하여 소셜 로그인을 활용할 수 있다.
그런데 Oauth2Login() 뿐만 아니라 login 성공시와 실패 시에 리다이렉트할 url를 넣어줄 수 있으므로 다음과 같이 작성하였다.
loginPage : 로그인 하는 페이지로 이동
defaultSuccessUrl : 로그인에 성공했다면 이동할 url
failureHandler : 실패했다면 핸들링할 Handler 지정
userInfoEndPoint : Provider로부터 가져온 유저정보 Service 지정
userService : 지정한 userService
참고
https://docs.spring.io/spring-authorization-server/docs/current/reference/html/getting-started.html