Spring Security 및 OAuth2를 이용해 소셜 로그인 기능 구현하기
스프링부트로 생성된 프로젝트에서 OAuth로그인을 구현하기 위해서 스프링 시큐리티와 스프링 시큐리디 OAuth2 클라이언트를 이용한다.
Spring Security란 Spring 기반의 애플리케이션의 보안(인증과 권한,인가등)을 담당하는 스프링 하위 프레임워크이다.
스프링 시큐리티는 인증과 권한을 Filter 흐름에 따라 처리하게 구현되어 있고, 이미 대부분의 보안적인 로직들이 포함되어 있어 개발자가 추가로 개발하지 않아도 된다는 장점이 있다.
OAuth2란 Open Authentication2의 약자로 사이트의 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 접근 권한을 부여할 수 있는 수단으로 사용되는 개방형 표준이다.
쉽게 말해 다른 웹 사이트상의 기술이 필요할때 잘 모르는 사이트에게 자신의 비밀번호나 별도의 정보를 제공하지 않고도 사용할 수 있도록 도와주는 것이다.
OAuth에 대해 이론적으로 더 자세히 알고 싶다면 여기를 참고하면 된다.
일반적으로 OAuth 인증을 하기 위해서는 인증을 위한 여러가지 절차대로 진행해야만 인증이 가능하다. 이러한 일련의 절차들을 설정 한번으로 간단하게 사용할 수 있도록 도와주는 것이 Spring OAuth2 Client이다.
사용한 프레임워크 또는 라이브러리
OAuth 로그인을 구현하기 위해서는 각 플랫폼에서 제공하는 OAuth 앱 또는 서비스를 등록해야 한다.
각 플랫폼에서 서비스를 등록하면 client ID와 client secret을 얻는다.
구글 OAuth 서비스 등록
구글 OAuth 서비스 등록을 위해 <구글 클라우드 플랫폼>에 접속한다. 빨간색 칸을 누르면 아래 사진처럼 프로젝트를 새로 생성할 수 있는 버튼이 나온다.
[새 프로젝트 버튼]을 누른다.
원하는 프로젝트 이름을 생성하고 [만들기] 버튼을 눌러서 프로젝트를 생성한다.
프로젝트가 생성되면서 이동된 화면에서 [API 개요로 이동] 버튼을 누른다.
구글 OAuth client를 사용하기 위해서는 OAuth 동의화면이 먼저 구성되어 있어야 한다. [OAuth 동의 화면] 버튼을 눌러 설정화면으로 이동한다.
앱이름, 이메일, 로고(선택) 을 입력한다.
아직 도메인이 없기 때문에 앱 도메인은 입력하지 않고 넘어간다.
승인된 도메인도 없기 때문에 도메인 추가는 하지 않고 개발자 연락처 정보(이메일 주소)만 입력해준다.
범위는 사용할 데이터의 권한 범위를 의미한다. 구글로부터 어떤 데이터에 접근권한을 받고 싶은지 선택한다.
이메일 정보와 프로필 정도만 필요하므로 위 사진처럼 2개만 선택한다.
다른 건 건들지 않고 다음으로 넘어간다.
테스트 사용자를 설정하는 화면이다. 계정 주인 이외의 다른 테스터를 추가하고자 하면 [+ADD USERS] 버튼을 눌러 추가할 수 있다.
OAuth 동의 화면 설정은 끝났고, [사용자 인증 정보] 버튼을 눌러 이동한다.
[사용자 인증 정보 만들기] 버튼을 누른다.
OAuth 클라이언트 ID를 클릭한다.
애플리케이션 유형을 선택해주고 이름을 입력한다.
리다이렉션 URI에 위와 같이 작성해 준다. 이 URI는 구글 로그인이 완료된 후 리다이렉션되는 페이지이다.
OAuth 클라이언트를 생성하고 나면 클라이언트 ID(client-id)와 클라이언트 보안 비밀번호(client-secret)을 얻을 수 있다.