관리 메뉴

A seeker after truth

스프링부트 5단원: spring security, OAuth 2.0 login 기능 본문

Springboot

스프링부트 5단원: spring security, OAuth 2.0 login 기능

dr.meteor 2020. 4. 3. 12:22

* 본문은 <스프링부트와 aws로 혼자 구현하는 웹서비스>(2019, 이동욱, 프리렉)을 공부하고 정리한 내용입니다.

 

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

  • 인증은 애플리케이션 작업을 수행하는 주체(즉, 사용자)라고 주장할 수 있는 것을 의미한다.
  • 권한은 인증된 주체가 애플리케이션의 특정 동작의 수행 여부가 허가되어 있는 지를 판단하는 것을 의미한다.

 

2. 구글 로그인 연동

•먼저 application-oauth.properties 파일을 생성하고 클라이언트 아이디와 클라이언트 보안 비밀 코드를 입력해야 한다.

  - 스프링부트에선 application-xxx.properties로 만들면 xxx란 이름의 profile이 생성되어 이를 관리할 수 있다.

    profile=xxx 란 식으로 호출하면 해당 properties의 설정들을 가져올 수 있다.

  - 호출은 application.properties에 "spring,profiles.include=oauth"란 코드를 추가함으로써 가능해진다.

 

1) com.mashupspring.domain.user.User

•@GeneratedValue(strategy = GenerationType.IDENTITY)

GeneratedValue는 데이터베이스 테이블 주키 Primary Key를 자동 생성하는 기능이다. 자동 생성 전략을 4개로 지정해 줄 수 있는데 지정해 주지 않으면 기본값은 ‘AUTO’이다.

 

출처:https://medium.com/@SlackBeck/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-2-0-jpa-auto-configuration%EC%9D%98-%EB%B3%80%ED%99%94-3160221cdfef

 

•@Enumerated(EnumType.STRING)

  - JPA로 데이터베이스로 저장할 때 Enum값을 어떤 형태로 저장할지 결정 (디폴트는 숫자)

 

2) com.mashupspring.domain.user.Role

스프링 시큐리티에선 권한 코드에 항상 ROLE_ 이 앞에 있어야만 한다.

 

3) com.mashupspring.domain.user.UserRepository

•java.util.Optional

자바 8부터 새로 생긴 클래스. NullPointerException 같은 널 예외를 간단하게 처리할 수 있다.

모든 참조 타입을 파라미터로 받을 수 있고, null 값을 가지는데 콘솔에 노출하지 않게 하거나, null이면 "정보없음" 과 같이 화면에 나타나게 해달라는 요구사항을 처리할 수 있음.

http://tcpschool.com/java/java_stream_optional 

https://jdm.kr/blog/234

•findByEmail

소셜 로그인으로 반환되는 값 중 이메일을 통해 이미 생성된 사용자인지 처음 가입하는 사용자인지 판단하는 메서드

 

 

스프링 시큐리티 설정

관련 의존성을 하나 추가하고 시작해야 한다.

compile('org.springframework.boot:spring-boot-starter-oauth2-client')

 

1) com.mashupspring.config.auth.SecurityConfig

보안 설정 코드

 

2) com.mashupspring.config.auth.CustomOAuth2UserService

구글 로그인 후 가져온 사용자의 정보(email, name, picture)들을 기반으로 가입, 정보 수정, 세션 저장 등의 기능을 지원

•싱글톤 패턴

전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
https://gmlwjd9405.github.io/2018/07/06/singleton-pattern.html

 

...이렇게 하다가, 코드를 공부하는 것만으론 이해가 되지 않아 아래와 같이 생성된 파일과 패키지, 상속/구현된 클래스, 추상클래스에 대해 공식 문서를 찾아보며 어떤 기능울 하는지 찾아보며 내용을 이해하려 노력했다.

 

 

OAuth에 대한 이해를 하는게 도움된다는 사실을 알게됐다.

https://minwan1.github.io/2018/02/24/2018-02-24-OAuth/