[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도 소셜 로그인 기능을 구현 가능
'Group Study (2021-2022) > Spring Boot' 카테고리의 다른 글
[Spring Boot] 6주차 스터디 - EC2 서버에 프로젝트 배포하기 (0) | 2021.11.25 |
---|---|
[Spring Boot] 2주차 3장 스프링 부트에서 JPA로 DB 다루기 (0) | 2021.11.15 |
[Spring Boot] 3주차 - 머스테치로 화면 구성하기 (0) | 2021.11.10 |
[Spring Boot] 5주차 - AWS EC2 / AWS RDS (0) | 2021.11.09 |
[Spring Boot] 1주차 스터디 - 스프링 부트 시작 / 테스트 코드 작성 (0) | 2021.10.04 |