Group Study (2021-2022)/Spring Boot

Spring Boot] 4주차 - 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

숙명권은지 2021. 11. 14. 17:43

[05장] 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

 

✔ 소셜 로그인 기능을 사용하는 이유?

  • 로그인 시 보안
  • 회원가입 시 이메일 혹은 전화번호 인증
  • 비밀번호 찾기
  • 비밀번호 변경
  • 회원정보 변경

위의 기능들을 모두 구글, 페이스북, 네이버 등에 맡길 수 있어 서비스 개발에 집중할 수 있음

 

🌼구글 로그인 연동🌼

1. 구글 서비스 등록

구글 클라우드 플랫폼 주소(https://console.cloud.google.com)로 이동
[프로젝트 선택] 탭을 클릭

[새 프로젝트] 버튼을 클릭

등록될 서비스의 이름을 입력

생성이 완료된 프로젝트를 선택하고 API 및 서비스 카테고리로 이동하여 사용자 인증 정보를 클릭

클라이언트 ID가 생성되기 전에 동의 화면 구성이 필요하므로 안내에 따라 [동의 화면 구성] 버튼을 클릭한 후,
다음과 같이 이전에 설정한 서비스의 이름을 입력

동의 화면 구성이 긑났으면 사용자 인증 정보 화면으로 이동하여 [사용자 인증 정보 만들기]를 클릭
그 중 [OAuth 클라이언트]를 클릭

웹 애플리케이션을 선택하고 프로젝트 이름을 등록

하단의 [승인된 리디렉션 URI]에 다음과 같은 값을 입력
생성 버튼을  클릭하면 생성된 클라이언트 정보와 클라이언트 ID / 클라이언트 보안 비밀 코드를 보여줌

 

✔ 승인된 리디렉션 URI란?

  • 서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트할 URL입니다.
  • 스프링 부트 2 버전의 시큐리티에서는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}로 리다이렉트 URL을 지원하고 있습니다.
  • 사용자가 별도로 리다이렉트 URL을 지원하는 Controller를 만들 필요가 없습니다. 시큐리티에서 이미 구현해 놓은 상태입니다.

 

application.properties가 있는 src/main/resources/ 디렉토리에 applicaion-oauth.properties 파일을 생성하고
해당 파일에 클라이언트 ID와 클라이언트 보안 비밀 코드를 등록


보안을 위해 깃허브에 applicaion-oauth.properties 파일이 올라가는 것을 방지하기 위해
.gitignore에 application-oauth.properties 코드 추가

2. 구글 로그인 연동하기

  • 사용자 정보를 담당할 도메인 인 User 클래스 생성
  • 각 사용자의 권한을 관리할 Enum 클래스 Role 생성
  • User의 CRUD를 책임질 UserRepository를 생성

 

스프링 시큐리티 설정

  • build.gradle에 스프링 시큐리티 의존성 compile('org.springframework.boot:spring-boot-starter-oauth2-client') 추가
  • 소셜 로그인 설정 코드인 SecurityConfig 클래스 생성
  • 구글 로그인 이후 가져온 사용자 정보들을 기반으로 가입 및 정보 수정, 세션 저장 등의 기능을 지원할 CustomOAuth2UserService 클래스 생성
  • OAuthAttributes 클래스 생성
  • SessionUser 클래스 생성 (인증된 사용자 정보만 필요)

 

로그인 테스트

  • index.mustache에 로그인 버튼과 성공 시 사용자 이름을 보여주는 코드 작성
  • index.mistache에서 userName을 사용할 수 있게 IndexController에서 userName을 model에 저장하는 코드 추가

 

프로젝트 실행

구글 로그인 버튼
구글 로그인 성공

 

같은 방식으로 Naver도 소셜 로그인 기능을 구현 가능

네이버 로그인 버튼 추가