스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 시큐리티 로그인

lacblueeun·2020년 12월 16일
0

springboot

목록 보기
5/17
post-thumbnail

1. 스프링 시큐리티(Spring Security)

막강한 인증(Authentication)인가(Authorization)기능을 가진 프레임워크입니다.
스프링 기반의 애플리케이션에서는 보안을 위한 표준이라 볼 수 있다.
인터셉터, 필터 기반의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 적극적으로 권장하고 있습니다.

1-1 스프링 시큐리티와 스프링 시큐리티 Oauth2 클라이언트

많은 서비스에서는 로그인 기능을 구글, 페이스북, 네이버 로그인과 같은 소셜 로그인 기능을 사용합니다.
OAuth 로그인 구현 시 비밀번호 찾기, 로그인시 보안과 같은 기능을 구현하지 않아도 되기 때문에 서비스 개발에 집중할 수 있다.

1-2 스프링 부트 1.5 vs 스프링 부트 2.0

스프링 부트 2.0에서 연동 방법이 크게 변경되었습니다. 하지만 인터넷 자료들을 보면 설정 방법에 크게 차이가 없는 경우를 자주 봅니다.

spring-security-oauth2-authoconfigure

라이브러리를 사용할 경우 기존에 쓰던 설정을 사용할 수 있다. 기존에 안전하게 작동하던 코드를 사용할 수 있다.

2. 구글로그인

2-1 구글서비스 등록

구글 클라우드 플랫폼 에서 프로젝트를 생성합니다.
생활코딩 구글 OAuth2 인증 에서 자세하게 과정을 볼 수 있습니다.

2-2 User 도메인

Enumrated(EnumType.STRING) : JPA로 데이터베이스에 저장할 때 Enum 값을 어떤 형태로 저장할지를 결정한다. 숫자로 저장된다면 그 값이 무슨 코드를 의미하는지 알 수가 없기 때문에 String으로 저장될 수 있도록 선언한다.

스프링 시큐리티에서는 권한 코드 앞에 항상 ROLE_ 이 앞에 있어야만 한다. 그래서 ROLE_USER, ROLE_GUEST 등으로 지정한다.

2-3 시큐리티 설정

@EnableWebSecurity : Spring Security 설정들을 활성화 시킨다.
http.csrf().disable().headers().frameOptions().disable() : h2 화면을 사용하기 위해 해당 옵션들을 disable 한다.
authorizeRequest : URL별 권한 관리를 설정하는 옵션이다. antMatchers 옵션을 사용할 수 있다.
antMatchers : 권한 관리 대상을 지정한다. URL, HTTP 메소드별로 관리가 가능하다. permitAll() 옵션을 통해 전체 열람 권한을 줄 수 있다. hasRole()으로 특정 권한을 가진 사람만 가능하도록 했다.

2-4 로그인 이후, 사용자의 정보 가입 및 수정, 세션 서장

registrationId : 현재 로그인 중인 서비스를 구분
이후에 네이버 로그인 연동 시에, 구글과 네이버를 구분하기 위해 사용한다.
userNameAttributeName : 로그인 진행 시 키가 되는 필드값을 이야기 한다.
OAuthAttributes : Service를 통해 가져온 attribute를 담은 클래스입니다.
SessionUser : 세션에 사용자의 정보를 저장하기 위한 Dto 클래스입니다.

처음 가입할 때 User의 엔티티를 생성한다. 가입할 때의 기본 권한을 GUEST로 주기 위해 role 빌더값에는 ROLE_GUEST를 사용한다.

SessionUser에는 인증된 사용자 정보만 필요하기 때문 name, email, picture만 필드로 선언한다.

profile
Go for Frontend Developer 🧪

0개의 댓글