Spring) Spring Security 을 좀 더 디테일 하게...(작성중)

박우영·2023년 6월 26일
0

자바/코틀린/스프링

목록 보기
30/35

개요

저의 생각보단 공부한 내용들을 정리하는 게시글 입니다.

MSA를 하다보니 Resource server, Authorization Server, API Gateway에서의 보안설정, OAUTH2, JWT 등 알아야 할 것이 많다고 느꼈습니다. 물론 모놀리식에서 설정도 해봤고 jwt, 소셜로그인 기능 또한 구현을 했지만 MSA 에서 구현을 할때는 이러한 설정들이 나누어지게 되고 인증을 어느 서버에서 할지 등 아키텍처 구현을 할때 부족하다는 것을 느껴 좀 더 디테일 하게 공부해 보기로 하였습니다.

Spring Security 생태계


개념 및 구조 이해

  • SecurityBuilder 는 빌더 클래스로서 웹 보안을 구성하는 빈 객체와 설정클래스들을 생성하는 역할을 하며 WebSecurity, HttpSecurity 가 있다

  • SecurityConfigurer 는 Http 요청과 관련된 보안처리를 담당하는 필터들을 생성하고 여러 초기화 설정에 관여한다
  • SecurityBuilder 는 SecurityConfigurer 를 포함하고 있으며 인증 및 인가 초기화 작업은 SecurityConfigurer 에 의해 진행된다.

OAUTH2.0

Roles

  • Resource Owner (자원 소유자)
    보호된 자원에 대한 접근 권한을 부여할 수 있는 주체, 사용자로서 계정의 일부에 대한 접근 권한을 부여하는 사람
    사용자를 대신하여 작동하려는 모든 클라이언트는 먼저 사용자의 허가를 받아야 한다

  • Resource Server (보호자원서버)
    타사 어플리케이션에서 접근하는 사용자의 자원이 포함된 서버를 의미한다
    액세스 토큰을 수락 및 검증할 수 있어야 하며 권한 체계에 따라 요청을 승인할 수 있어야 한다.

  • Authorization Server  (인가서버)
    클라이언트가 사용자 계정에 대한 동의 및 접근을 요청할 때 상호 작용하는 서버로서 클라이언트의 권한 부여 요청을 승인하거나 거부하는 서버
    사용자가 클라이언트에게 권한 부여 요청을 승인한 후 access token 을 클라이언트에게 부여하는 역할

  • Client (클라이언트)
    사용자를 대신하여 권한을 부여받아 사용자의 리소스에 접근하려는 어플리케이션
    사용자를 권한 부여 서버로 안내하거나 사용자의 상호 작용 없이 권한 부여 서버로부터 직접 권한을 얻을 수 있다

Oauth 2.0 Client Types

  • 기밀 클라이언트 (Confidential Clients)
    기밀 클라이언트는 client_secret 의 기밀성을 유지할 수 있는 클라이언트를 의미한다.
    일반적으로 사용자가 소스 코드에 액세스할 수 없는 서버에서 실행되는 응용 프로그램으로 NET, Java, PHP 및 Node.JS와 같은 서버 측 언어로 작성된다
    이러한 유형의 애플리케이션은 대부분 웹 서버에서 실행되기 때문에 일반적으로 "웹 앱"이라고 한다

  • 공개 클라이언트 (Public Clients)
    공개 클라이언트는 client_secret 의 기밀을 유지할 수 없으므로 이러한 앱에는 secret 이 사용되지 않는다.
    브라우저(SPA)에서 실행되는 JavaScript 애플리케이션, Android 또는 iOS 모바일 앱, 데스크톱에서 실행되는 기본 앱뿐만 아니라 IoT/임베디드 장치에서 실행되는 애플리케이션 등이 있다
    Chrome 개발자 콘솔이나 디스어셈블러와 같은 디버깅 도구를 사용하여 바이너리/실행 코드에서 기밀 정보를 추출할 수 있기 때문에 공개로 간주된다
    서버측이 아닌 리소스 소유자가 사용하는 장치에서 실행되는 모든 클라이언트는 공개 클라이언트로 간주되어야 한다

우리는 back 단에서 처리를 할거기때문에 기밀 클라이언트 타입을 사용 할 것입니다. 이는 보안성을 향상 시킬 수 있기때문입니다.

0개의 댓글