본문 바로가기
Spring/SpringSecurity

[spring / spring security] 02-1. 구글 연동 및 시큐리티 설정

by SIXXXX_ 2022. 9. 14.
728x90

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만 필드로 선언한다.