OAuth 로그인은 편리합니다. 필수 로그인 기능(로그인 보안, 이메일/전화번호 인증, 비밀번호 변경/찾기, 회원 정보 변경 등)들을 구글이나 페이스북 등에 맡기면 됩니다. 이 글에서는 스프링 부트 2 방식인 Spring Security Oauth 2 Client 라이브러리를 사용해서 소셜 로그인을 구현합니다. 소셜 로그인에는 크게 두 가지 작업이 필요합니다.
첫째, 인증정보 발급
둘째, 프로젝트 구현
이 글에서는 구글과 네이버의 로그인 인증정보를 발급하는 과정을 알아보겠습니다.
구글 로그인 기능을 구현하려면 크게 세 가지 작업을 거칩니다. 아래 글을 읽고 스크린샷을 참고해 두어번 따라해보면 쉽게 익힐 수 있습니다.
로그인을 구현하려면 로그인 인증정보(OAuth client-id와 client-secret)가 필요합니다. 해당 값을 발급받기 위해 Google Cloud Console로 이동합니다. 새 프로젝트를 생성하고 사용자 인증 정보 탭에서 OAuth Client ID 항목을 선택합니다. 동의 화면을 구성하고 OAuth Client ID를 생성합니다. 이때 승인된 리디렉션 URI를 등록합니다. 개발 단계에서는 http://localhost:8080/login/oauth2/code/google
로 등록하고, AWS 배포 시에는 주소를 추가로 등록합니다.
OAuth Client ID 생성을 마치면 client-id와 client-secret을 얻을 수 있습니다. (해당 값은 외부에 공개되면 안 됩니다.) 값을 메모장에 복사해둡니다.
application-oauth.properties를 생성합니다.(.yaml로 구성해도 됩니다.) 아래와 같이 작성합니다.
spring.security.oauth2.client.registration.google.client-id= 복사한 값
spring.security.oauth2.client.registration.google.client-secret= 복사한 값
프로젝트에서 application-oauth.properties를 인식할 수 있도록 application.properties에 아래 코드를 추가합니다.
spring-profiles.include=oauth
client-secret은 외부에 공개되어서는 안 됩니다. github에 업로드가 되지 않도록 .gitignore에 아래 코드를 추가합니다.
application-oauth.properties
클라이언트 보안 비밀은 외부에 공개되면 안 됩니다! (화면에 보이는 클라이언트 보안 비밀은 이미 삭제됐습니다.)
네이버는 스프링 시큐리티를 공식 지원하지 않습니다. 구글 로그인시 CommonOAuth2Provider에서 해주던 값들을 수동으로 입력해야 합니다. 이 외에는 구글과 엇비슷합니다.
client-id와 client-secret을 발급받기 위해 네이버 Developers로 이동합니다. 각 항목을 선택하고 생성합니다.
client-id와 client-secret을 application-oauth.properties에 등록합니다. 구글 로그인에 비해 application-oauth.properties에 수동으로 입력해야 하는 값이 늘었습니다. 네이버에서는 스프링 시큐리티를 공식 지원하기 않기 때문입니다.
OAuthAttributes에 registrationId가 "naver"인지 판단하는 코드와 네이버 생성자를 추가합니다.
클라이언트 보안 비밀은 외부에 공개되면 안 됩니다! (화면에 보이는 클라이언트 보안 비밀은 이미 삭제됐습니다.)
다음 글에서는 인증 정보를 프로젝트에 구현해보겠습니다.
스프링 부트와 AWS로 혼자 구현하는 웹 서비스
이동욱 지음ㅣ프리렉ㅣ2019ㅣ도서 정보