기존 보안 매커니즘의 문제점

마이크로서비스와 JWT

거대하고 복잡한 단일 애플리케이션 개발에서 서비스를 작은 단위로 분할하여 민첩한 개발을 할 수 있는 마이크로 서비스가 주목 받고 있습니다.하지만 소프트웨어에서 보안은 항상 어려운 문제입니다.
마이크로서비스 아키텍처가 발전함에 따라 각각의 API 서버들은 API 클라이언트에 대한 Authentication (인증)과 Authorization (인가/권한부여)를 위한 매커니즘이 필요합니다.

마이크로서비스 아키텍처에서 인증 ( Authentication ) 과 인가/권한 ( Authorization )

모노리스 환경에서는 세션을 이용하여 상태를 저장하고 관리하는 세션 기반 인증이 방법을 주로 사용하였으며 잘 작동하였습니다.
그러나 여러 개의 독립 서비스로 구성되는 마이크로서비스 환경에서는 중앙에서 상태를 유지할 수 있는 방법을 적용하기가 어렵습니다.
마이크로서비스 아키텍처를 구축하기 위한 과제 중에 가장 중요한 것이 바로 잘 고려된 인증(Authentication ) 과 인가 (Authorization) 전략입니다.
인증, 보안, 로깅과 같은 크로스 커팅은 항상 도전적인 과제이며 많은 이해 관계자가 관련되어 있습니다.
이러한 문제를 해결하기 위한 방법에는 SSO (싱글 사이온) 솔루션이나 분산 세션 솔루션이 좋은 아이디어 인것처럼 보이지만,공유 데이터저장소와 중앙집중형 관리 방법으로 인한 비효율성과 복잡성이 발생합니다.

Cookie 기반 세션을 통한 인증 방식과 토큰 방식의 비교

Source : Cookies vs. Tokens: The Definitive Guide –
https://dzone.com/articles/cookies-vs-tokens-the-definitive-guide

JWT 방식과 세션 방식의 차이점

JWT(JSON Web Token)은 토큰 기반 인증 방식으로, 세션에 사용자 정보를 저장할 필요가 없기 때문에 세션 서버도 필요없습니다.
JSON Web Token (JWT)는 마이크로 서비스의 인증, 인가에 사용할 수 있는 서명된 JSON 입니다.
토큰을 사용하면 세션을 통한 방식과 달리 서버측 부하를 낮출 수 있고 능률적인 접근 권한 관리를 할 수 있으며 분산/클라우드 기반 인프라스트럭처에 더 잘 대응할 수 있습니다.

JWT ( JSON Web Token ) 는 마이크로 서비스를 위해 만들어졌습니다.

Microservice With OAuth

기존의 토큰 방식 인증은 다이어그램에 표시된 것처럼 토큰은 이후의 모든 서비스 호출에 사용됩니다.
서비스를 받기 위해서는 토큰의 유효성을 확인하여 세부 정보를 쿼리해야합니다.
참조에 의한 호출(By Reference) 형태로 모든 서비스는 항상 상호 작용할 때 다시 접속해야합니다.

Microservice With JWT

JWT 와 같이 값에 의한 호출이 가능한 토큰이 필요합니다.
토큰이 필요한 모든 정보를 포함하고 있어 참조(적어도 인증 및 권한 부여를 위해)가 필요없기 때문에 마이크로서비스 자체에서 유효성을 검증 합니다.
이것이 JWT ( JSON Web Token )의 목적입니다!

다음과 같은 상황에서 JWT 가 유용하게 사용 될 수 있습니다.

  • 회원 인증: JWT 를 사용하는 가장 흔한 시나리오 입니다. 사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로한 토큰을 발급합니다.
    그 후, 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 전달합니다. 서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 사용자가 요청한 작업에 권한이 있는지 확인하여 작업을 처리합니다.
    서버에서는 사용자에 대한 세션을 유지 할 필요가 없습니다. 즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고, 사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서 서버 자원과 비용을 절감할 수 있습니다.
  • 정보 교류: JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법입니다. 그 이유는, 정보가 서명이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지, 또 정보가 도중에 조작되지는 않았는지 검증할 수 있습니다.
마이크로서비스를 위한 JWS

JWT는 JSON Web Token의 약자로 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.
JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.
이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만듭니다.

JWT 에 대한 상세한 내용은 다음에 ….

JBoss EAP7에 포함된 Red Hat SSO 는 무엇?

  • Red Hat SSO (Keycloak )은 Web에서 SSO를 구현하기 위한 오픈소스
  • SAML 2.0 뿐만 아니라 REST/JSON 기반의 OpenID Connect 지원

References & Related Links

JBoss EAP 제품소개 자료

  • 클라우드/컨테이너 환경에 최적화
  • 마이크로서비스 아키텍처 지원
  • 가볍고 빠른 미들웨어
  • Wildfly 기반

오픈소스WAS 전환 체크리스트

  • 마이그레이션의 난이도와 투입 리소스를 예측하기 위한 사전 진단 시트
  • 해당 업무의 개발자와 운영자를 대상으로 인터뷰를 진행
  • 기존 시스템의 운영 이슈나 개선점 확인
JBoss 마이그레이션 도구

UNIX-to-Linux (U2L) 개요

  • 저비용 고효율 IT 시스템 구축

    • 전세계 Unix 시장점유율은 계속 감소하는데 반해 리눅스는 증가하고 있는 추세임
    • Unix 시스템을 비용효율적인 X86 서버로 대체함으로서, 시스템 구축 비용 및 운영 비용 절감과 유연성 확보
  • IT 환경의 유연성과 기술혁신 토대 마련

    • 신기술 수용, 유연성, 비용 효율화, 유지보수 효율성 확보
    • x86/리눅스 기반의 인프라 혁신이 주류
    • 최근 SW의 개발환경이 대부분 리눅스 플랫폼임
  • 클라우드 레디 시스템 구축

    • 클라우드 인프라 기반 플랫폼은 x86/리눅스 서버가 주를 이룸
    • x86 서버는 오픈 클라우드 환경 전환이 용이하나, Unix서버는 벤더 종속적임
거침없이 배우는 JBoss10점
전준식 엮음/지&선(지앤선)