스프링부트 - #5 oAuth2

2020. 11. 17. 13:21개발&TIL/스프링

인증과 권한에 관련된 강력한 기능인 스프링 부트 시큐리티를 제공

스프링 부트 시큐리티는 스프링 시큐리티의 번거로운 설정을 간소화 시켜주는 래핑 프레임워크

가장 중요한 개념은 '인증(authentication)''권한 부여(authorization)'

인증 : 사용자(클라이언트)가 애플리케이션의 특정 동작에 관하여 허락(인증)된 사용자인지 확인하는 절차

권한 부여 : 데이터나 프로그램 드의 특정 자원이나 서비스에 접근할 수 있는 권한 허용

인증방식

  1. 크리덴셜 기반 인증 방식 : 사용자명과 비밀번호로 인증
  2. 이중 인증 방식 : OTP와 같은 추가적인 인증 방식을 도입해 한번에 2가지 방법으로 인증하는 인증 방식
  3. OAuth2 인증 방식 : 소셜 미디어를 사용해 편리하게 인증하는 방식

OAuth2는 토큰을 사용한 범용적인 밥범의 인증을 제공하는 표준 인증 프로토콜

OAuth2는 OAuth 프로토콜의 버전 2

OAuth2에서 제공하는 승인 타입

  1. 권한 부여 코드 승인 타입(authorization code grant type)
  2. 암시적 승인 타입(implicit grant type)
  3. 리소스 소유자 암호 자격 증명 승인 타입(resource owner password credentials grant type)
  4. 클라이언트 자격 증명 승인 타입(client credentials grant type)

페이스북, 구글, 카카오 등의 소셜 미디어들이 지원하는 방식인 '권한 부여 코드 승인 타입' 샘플 및 설명도 해당 방식

'권한 부여 코드 승인 타입'은 웹서버에서 장기 액세스 토큰을 사용하여 사용자 인증을 처리하는 방식

스프링 부트 시큐리티 + OAuth2 의존성 설정하기 (boot 1.5)

compile('org.springframework.security.oauth:spring-security-oauth2')

간략 구현 절차

  1. SNS 프로퍼티 설정 빝 바인딩
  2. 시큐리티 + OAuth2 설정하기
  3. 어노테이션 기반으로 User 정보 불러오기
  4. 인증 동작 확인하기
  5. 페이지 권한 분리하기

@EnableWebSecurity

  • 웹에서 시큐리티 기능을 사용하겠다는 어노테이션으로 스프링 부트에서 사용하면 자동 설정이 적용

@EnableOAuth2Client

  • OAuth2 클라이언트 사용 선언 어노테이션

HandlerMethodArgumentResolver 인터페이스

  • org.springframework.web.method.support.HandlerMethodArgumentResolver
  • 이 인터페이스는 전략 패턴의 일종으로 컨트롤러 메서드에서 특정 조건에 해당하는 파라미터가 있으면
    생성한 로직을 처리하 ㄴ후 해당 파라미터를 바인딩해주는 전략 인터페이스

전략 패턴

  • 특정 전략을 인터페이스로 만들고 이를 여러 전략 객체로 구현, 현재 클래스 레벨에서 전략 인터페이스를
    의존하도록 하여 느슨하게 연결된 전략 클래스를 찾아 의존하도록 하는 방식

스프링 부트 시큐리티 + OAuth2 의존성 설정하기 (boot 2.0)

  • 설정이 세분화 됨
  • security-oauth2-client : 클라이언트 자동인증 설정
  • spring-security-oauth2-jose : JWT(Json Web Tokens)와 관련한 권한을 한전하게 전송하기 위한
    프레임워크인 JOSE(Javascript Object signing And Encryption)
    compile('org.springframework.security:spring-security-oauth2-client')
    compile('org.springframework.security:spring-security-oauth2-jose')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-web')
728x90

'개발&TIL > 스프링' 카테고리의 다른 글

스프링부트 - #7 batch  (0) 2020.11.17
스프링부트 - #6 REST  (0) 2020.11.17
스프링부트 - #4 web  (0) 2020.11.17
스프링부트 - #3 테스트  (0) 2020.11.17
스프링부트 - #2 환경설정  (0) 2020.11.17