build.gradle에 의존성 추가
implement 'org.springframework.boot:spring-boot-starter-oauth2-client'
- spring-boot-starter-oauth2-client
- 소셜 로그인 등 클라이언트 입장에서 소셜 기능 구현시 필요한 의존성이다.
- spring-security-oauth2-client 와 spring-security-oauth2-jose를 기본적으로 관리한다.
config.auth패키지 생성
@EnableWebSecurity
- spring security 설정들을 활성화시켜준다.
@csrf().disable().headers().frameOptions().disable()
- h2-console화면을 사용하기 위해ㅐ 해당 옵션들을 disable한다.
@authorizeRequests
- URL별 권한 관리를 설정하는 옵션의 시작점이다.
- authorizeRequests 가 선언되어야만 antMatchers 옵션을 사용할 수 있다.
@antMatchers
- 권한 관리 대상을 지정하는 옵션이다.
- URL, HTTP 메소드별로 관리가 가능하다.
- "/"등 지정된 URL 들은 permitAll()옵션을 통해 전체 열람 권한을 주었다.
- "/api/v1/**" 주소를 가진 API 는 USER 권한을 가진 사람만 가능하도록 했다.
@anyRequest
- 설정된 값들 이외 나머지 URL 들을 나타낸다.
- 여기서는 authenticatend() 을 추가해 나머지 URL 들은 모두 인증된 사용자들에게만 허용하게 한다.
- 인증된 사용자 즉, 로그인한 사용자들을 이야기한다.
@logout().logoutSuccessUrl("/")
- 로그아웃 기능에 대한 여러 설정의 진입점이다.
- 로그아웃 성공시 / 주소로 이동한다.
@oauth2Login
- OAuth2 로그인 기능에 대한 여러 설정의 진입점이다.
@userInfoEndpoint
- OAuth2 로그인 성공 이후 사용자 정보를 가져올때의 설정들을 담당한다.
@userService
- 소셜 로그인 성공시 후속조치를 진행할 UserService 인터페이스의 구현체를 등록한다.
- 리소스 서버(즉, 소셜 소비스들)에서 사용자 정보를 가져온 상태에서 추가로 진행하고자 하는 기능을 명시할 수 있다.
@registerationId
- 현재 로그인 진행 중인 서비스를 구분하는 코드
- 지금은 구글만 사용하는 불필요한 값이지만, 이후 네이버 로그인 연동시에 네이버 로그인인지, 구글로그인인지 구분하기 위해 사용
@userNameAttributeName
- OAuth2 로그인 진행시 키가 되는 필드값을 이야기한다. Primary key 와 같은 의미
- 구글의 경우 기본적으로 코드를 지원하지만, 네이버 카카오 등은 기본 지원하지 않는다. 구글의 기본 코드는 "sub" 이다.
이후 네이버 로그인과 구글 로그인을 동시 지원할때 사용된다.
@OAuthAttributes
- OAuth2UserService 를 통해 가져온 OAuth2User 의 attribute 를 담을 클래스
- 이후 네이버 등 다른 소셜 로그인도 이 클래스를 사용한다.
- 바로 아래에서 이 클래스의 코드가 나오니 차례로 생성하면 된다.
@SessionUser
- 세션에 사용자 정보를 저장하기 위한 Dto클래스이다.
- 왜 User 클래스를 쓰지 않고 새로 만들어 쓰는지 ?
OAuthAttributes 는 Dto로 보기 때문에 config.auth.dto 패키지를 만들어 해당 패키지에 생성
of()
- OAuth2User 에서 반환하는 사용자 정보는 Map 이기 때문에 값 하나하나를 변환해야 한다.
@toEntity()
- User 엔티티를 생성한다
- OAuthAttributes 에서 엔티티를 생성하는 시점은 처음 가입할 때이다.
- 가입할 때의 기본 권한을 GUEST 로 주기 위해서 role 빌더값에서는 Role.GUEST 를 사용한다.
- OAuthAttributes 클래스 생성이 끝났으면 같은 패키지에 SessionUser 클래스를 생성한다.
SessionUser 에는 인증된 사용자 정보만 필요
name, email, picture만 필드로 선언한다.
'Spring > SpringSecurity' 카테고리의 다른 글
[Spring / Spring Security] 01. 스프링 시큐리티 개요 및 특징, 방법 (0) | 2022.09.12 |
---|