(Spring Security) JWT (Json Web Token)

soosoorim·2024년 5월 9일
0

JWT (Json Web Token)
가장 일반적인(전통적인) 형태의 Web Application 형태

  • Backend Server와 Frontend Server가 하나로 합치어진 형태(Monolithic)
  • Backend 또는 Logic 에 문제가 생길 경우, Backend & Frontend 모두 사용할 수 없다.

JWT의 특징

  • 무상태성
    HttpSession은 서버에 사용자에 정보를 저장하는 방법.
    Token 방식은 서버가 사용자의 정보를 Token이라는 형태로 클라이언트에게 전송.
    서버는 사용자의 정보를 가지지 않는다.

  • 확장성
    JWT는 서버가 사용자의 정보를 가지지 않기 때문에, 다른 서버의 API를 사용할 때에도
    동일한 토큰으로 인증을 처리할 수 있다.
    서비스를 위한 서버를 추가하더라도 인증과 관련된 이슈가 존재하지 않는다.

  • 무결성
    토큰을 발급 받은 이후부터 토큰 정보를 변경할 수 없다.
    악의적인 사용자가 토큰을 한 글자라도 변경할 경우,
    인증 서버에서는 유효하지 않는 토큰으로 처리하게 된다.

REST API
브라우저 이외의 방법으로 HTTP를 호출하는 방법
PostMan 툴이 필요함

인증의 주체는 클라이언트

JWT 토큰 발급 및 검증 기능 구현하기

  • JWT 인증을 위한 Dependency 추가 (pom.xml)
  • JWT 발행자 및 비밀키 지정 (application.properties / application.yml)
  • com.example.demo.beans.security.jwt 패키지 생성
  • JsonWebTokenProvider.java 파일 생성 및 작성

JWT 필터 구현하기

  • JwtAuthenticationFilter.java 파일 생성 및 작성

JWT 필터 활성화 설정하기

  • 필터가 동작할 수 있도록 활성화 설정 (SecurityConfig.java)

JWT 생성 End-point 작성하기

  • JWT를 생성하는 End-Point 작성
    (com.example.demo.beans.security.jwt.JwtController.java)

JWT 발급 테스트 - PostMan으로 테스트해보기

  • JWT 정상 발급

  • JWT 발급 실패

JWT 인증 End-point 만들기

  • ReplyController.java 파일을 복사하고 RestReplyController.java 로 붙여넣기
    (RestReplyController.java)

  • /api/ URL은 CSRF 체크 하지 않도록 처리하기 (SecureConfig.java)

  • PostMan으로 테스트해보기. – 댓글 조회 해보기
    (value에 위에서 발급받은 토큰 그대로 넣기)




MSA (Micro Service Architecture)
개선된 형태의 Web Application 형태

  • Backend 와 Frontend가 완전히 분리되어진 형태 (MSA: Micro Service Architecture)
    Client와 Server는 RESTful API로 통신한다.
  • Backend에 문제가 생기더라도 Frontend에 큰 영향을 주지 않는다.
  • 사용자 입장에서는 좋지만 장애 복구가 힘들다.

MSA 형태의 문제점

  • Monolithic 형태의 Web Application은 인증 및 인가를 한 서버내에서 모두 처리.
  • 인증/인가와 관련된 이슈가 존재하지 않는다. (책임이 없다.)
  • MSA 형태의 Web Application은 한번의 인증으로 여러 서버와 통신을 해야 한다.
    인증 동기화의 문제가 발생한다.
    인증만 처리하는 인증 서버가 필요.
    JSON 형태의 인증 정보를 클라이언트와 서버가 주고 받는다. (Json Web Token)

0개의 댓글

관련 채용 정보