저의 생각보단 공부한 내용들을 정리하는 게시글 입니다.
MSA를 하다보니 Resource server, Authorization Server, API Gateway에서의 보안설정, OAUTH2, JWT 등 알아야 할 것이 많다고 느꼈습니다. 물론 모놀리식에서 설정도 해봤고 jwt, 소셜로그인 기능 또한 구현을 했지만 MSA 에서 구현을 할때는 이러한 설정들이 나누어지게 되고 인증을 어느 서버에서 할지 등 아키텍처 구현을 할때 부족하다는 것을 느껴 좀 더 디테일 하게 공부해 보기로 하였습니다.
Resource Owner (자원 소유자)
보호된 자원에 대한 접근 권한을 부여할 수 있는 주체, 사용자로서 계정의 일부에 대한 접근 권한을 부여하는 사람
사용자를 대신하여 작동하려는 모든 클라이언트는 먼저 사용자의 허가를 받아야 한다
Resource Server (보호자원서버)
타사 어플리케이션에서 접근하는 사용자의 자원이 포함된 서버를 의미한다
액세스 토큰을 수락 및 검증할 수 있어야 하며 권한 체계에 따라 요청을 승인할 수 있어야 한다.
Authorization Server (인가서버)
클라이언트가 사용자 계정에 대한 동의 및 접근을 요청할 때 상호 작용하는 서버로서 클라이언트의 권한 부여 요청을 승인하거나 거부하는 서버
사용자가 클라이언트에게 권한 부여 요청을 승인한 후 access token 을 클라이언트에게 부여하는 역할
Client (클라이언트)
사용자를 대신하여 권한을 부여받아 사용자의 리소스에 접근하려는 어플리케이션
사용자를 권한 부여 서버로 안내하거나 사용자의 상호 작용 없이 권한 부여 서버로부터 직접 권한을 얻을 수 있다
기밀 클라이언트 (Confidential Clients)
기밀 클라이언트는 client_secret 의 기밀성을 유지할 수 있는 클라이언트를 의미한다.
일반적으로 사용자가 소스 코드에 액세스할 수 없는 서버에서 실행되는 응용 프로그램으로 NET, Java, PHP 및 Node.JS와 같은 서버 측 언어로 작성된다
이러한 유형의 애플리케이션은 대부분 웹 서버에서 실행되기 때문에 일반적으로 "웹 앱"이라고 한다
공개 클라이언트 (Public Clients)
공개 클라이언트는 client_secret 의 기밀을 유지할 수 없으므로 이러한 앱에는 secret 이 사용되지 않는다.
브라우저(SPA)에서 실행되는 JavaScript 애플리케이션, Android 또는 iOS 모바일 앱, 데스크톱에서 실행되는 기본 앱뿐만 아니라 IoT/임베디드 장치에서 실행되는 애플리케이션 등이 있다
Chrome 개발자 콘솔이나 디스어셈블러와 같은 디버깅 도구를 사용하여 바이너리/실행 코드에서 기밀 정보를 추출할 수 있기 때문에 공개로 간주된다
서버측이 아닌 리소스 소유자가 사용하는 장치에서 실행되는 모든 클라이언트는 공개 클라이언트로 간주되어야 한다
우리는 back 단에서 처리를 할거기때문에 기밀 클라이언트 타입을 사용 할 것입니다. 이는 보안성을 향상 시킬 수 있기때문입니다.