1. 설정
Spring Security와 OAuth 2를 사용하기 위해 필요한 Dependency들을 build.gradle에 추가
'org.springframework.boot:spring-boot-starter-security'
'org.springframework.boot:spring-boot-starter-oauth2-client'
사용 할 소셜로그인(구글, 네이버, 카카오) 서비스 등록하고 인증 정보 설정하기
- application-oauth.yml 파일 생성
- 해당 파일에 클라이언트 ID와 클라이언트 비밀코드 등록
- 보안을 위해 .gitignore에 등록
2. 도메인 구현
- DB 연결, Entity, Service, Repository 구현
3. SecurityConfig 구현
.../cofing/SecurityConfig
- 필터 적용
- 인증된 사용자만 Login 외 다른 페이지 접근 가능 (whitelist 제외)
- @EnableWebSecurtiy : Spring Security 설정 활성화
- authorizeRequests : URL별 권한 관리 설정, 선언 시 antMatchers 사용 가능
- antMatchers : 권한 관리 대상 지정, URL/HTTP Method별 관리 가능
- anyRequest : 설정된 값들 이외 나머지 URL
- userService : 소셜 로그인 성공 시 후속 조치를 진행 할 UserService 인터페이스의 구현체
리소스 서버(즉, 소셜 서비스)들에서 사용자 정보를 가져온 상태에서 추가로 진행하고자 하는 기능 명시
4. PrincipalDetails 구현
.../config/auth/PrincipalDetails
- Security /login 요청 시 대신 로그인 진행
- 로그인 완료 시 시큐리트 session 생성(Security ContextHolder)
- Autentication 안에 user 정보가 있어야 됨
- User 오브젝트 타입 => UserDetails 타입 객체
*** Security Session => Authentication => UserDetails(PrincipalDetails)
5. PrincipalDetailsService 구현
.../config/auth/PrincipalDetailsService
- Security cofing -> loginProcessingUrl("/loginProcessing") 실행
- /자동으로 UserDetailService 타입으로 IoC 되어있는 loadUserByUserName 함수 실행
6. PrincipalOauth2UserService 구현
.../config/oauth/PrincipalOauth2UserService
- 소셜 로그인 버튼 클릭 -> 로그인 창 -> 로그인 완료 -> code return(OAuth-client)
-> AccessToken 요청
- userRequest 정보 -> loadUser 함수 -> 회원정보 수집
- user 정보가 없을 시 회원가입 강제 진행
- getRegistrationId() 값에 따라 provider 클래스 다르게 호출
Provider 구분
.../config/oauth/userinfo/Oauth2UserInfo
.../config/oauth/userinfo/GoogleUserInfo
.../config/oauth/userinfo/NaverUserInfo