개발&TIL/스프링
스프링부트 - #5 oAuth2
형은용서없다
2020. 11. 17. 13:21
인증과 권한에 관련된 강력한 기능인 스프링 부트 시큐리티를 제공
스프링 부트 시큐리티는 스프링 시큐리티의 번거로운 설정을 간소화 시켜주는 래핑 프레임워크
가장 중요한 개념은 '인증(authentication)'과 '권한 부여(authorization)'
인증 : 사용자(클라이언트)가 애플리케이션의 특정 동작에 관하여 허락(인증)된 사용자인지 확인하는 절차
권한 부여 : 데이터나 프로그램 드의 특정 자원이나 서비스에 접근할 수 있는 권한 허용
인증방식
- 크리덴셜 기반 인증 방식 : 사용자명과 비밀번호로 인증
- 이중 인증 방식 : OTP와 같은 추가적인 인증 방식을 도입해 한번에 2가지 방법으로 인증하는 인증 방식
- OAuth2 인증 방식 : 소셜 미디어를 사용해 편리하게 인증하는 방식
OAuth2는 토큰을 사용한 범용적인 밥범의 인증을 제공하는 표준 인증 프로토콜
OAuth2는 OAuth 프로토콜의 버전 2
OAuth2에서 제공하는 승인 타입
- 권한 부여 코드 승인 타입(authorization code grant type)
- 암시적 승인 타입(implicit grant type)
- 리소스 소유자 암호 자격 증명 승인 타입(resource owner password credentials grant type)
- 클라이언트 자격 증명 승인 타입(client credentials grant type)
페이스북, 구글, 카카오 등의 소셜 미디어들이 지원하는 방식인 '권한 부여 코드 승인 타입' 샘플 및 설명도 해당 방식
'권한 부여 코드 승인 타입'은 웹서버에서 장기 액세스 토큰을 사용하여 사용자 인증을 처리하는 방식
스프링 부트 시큐리티 + OAuth2 의존성 설정하기 (boot 1.5)
compile('org.springframework.security.oauth:spring-security-oauth2')
간략 구현 절차
- SNS 프로퍼티 설정 빝 바인딩
- 시큐리티 + OAuth2 설정하기
- 어노테이션 기반으로 User 정보 불러오기
- 인증 동작 확인하기
- 페이지 권한 분리하기
@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