- 직접 로그인 기능을 구현하는 것보다 소셜 로그인 기능을 구현하면 생기는 장점
- 로그인 시 보안
- 회원가입 시 이메일 혹은 전화번호 인증
- 비밀번호 찾기
- 비밀번호 변경
- 회원정보 변경
등의 기능을 모두 구글/페이스북/네이버 등에 맡기면 된다.
원래는 스프링부트 1.5와 2.0의 연동 방법이 좀 다르지만, spring-security-oauth2-authconfigure 라이브러리로 인해 설정 방법이 비슷하다.
이 라이브러리를 이용할 경우 1.5의 설정을 2.0에서도 그대로 사용할 수 있다.
하지만, 나는 Spring Security Oauth2 Client 라이브러릴 사용할거다.
- 이유
- 1.5는 신규 기능을 추가하지 않고 버그 수정 정도의 기능만 추가됨, 신규 기능은 oauth2에서 지원
- 스프링 부트용 라이브러리(starter) 출시
- 기존 방식은 확장 포인트가 적절히 오픈되어 있지 않아 직접 상속하거나 오버라이딩 해야함, 그러나 신규 라이브러리는 확장 포인트를 고려해서 설계됨
생성된 프로젝트를 선택하고 API 및 서비스 카테고리로 이동
구현할 소셜 로그인은 OAuth 클라이언트 ID로 구현
바로 클라이언트 ID가 생성되기 전에 동의 화면 구성이 필요하므로 버튼 클릭
앱 이름 : 구글 로그인 시 사용자에게 노출될 애플리케이션 이름
지원 이메일 : 사용자 동의 화면에서 노출될 이메일 주소(보통은 서비스 help 이메일 주소)
Google API 범위 : 이번에 등록할 구글 서비스에서 사용할 범위 목록
기본값은 email/profile/openid이다. 이외 다른 정보들도 사용하고 싶다면 범위를 추가하면 된다.
다하고 다시
생성 완료~~
아이디와 보안 비밀이 생성된다.
이제 클라이언트 ID(clientId)와 클라이언트 보안 비밀(clientSecret) 코드를 프로젝트에서 설정하겠다.
application-oauth.properties 생성
src/main/resources/ 아래에 생성
application.properties에 추가
spring.profiles.include=oauth
많은 예제에서 따로 scope를 등록하지 않음(원래 기본값 3개, 위 참고)
굳이 저 스코프를 넣은 이유는 openid라는 scope가 있으면 Open Id Provider로 인식하기 때문 => 그럼 OpenId Provider인 서비스(구글)와 그렇지 않은 서비스(네이버/카카오 등)로 나눠서 각각 OAuth2Service를 만들어야 함, 나누지 않으려고 openid scope를 빼고 등록한다.
스프링 부트에서는 properties의 이름을 application-xxx.properties로 만들면 xxx라는 이름의 profile이 생성되어 이걸로 관리가 가능하다.
즉, profile=xxx라는 식으로 호출하면 해당 properties의 설정들을 가져올 수 있다.
그래서 위에서는 include=oauth해서 가져왔다.
application-oauth.properties
클라이언트 아이디와 클라이언트 보안 비밀은 노출되면 안되기 때문에 gitignore에 추가한다.
이렇게 등록 후에 커밋했는데 커밋 목록에 application-oauth.properties가 노출되었다.
삭제됨 휴