ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] JWT와 Session
    web study/JavaScript 2021. 7. 16. 17:47

    자바 스크립트의 기본적인 보안을 위한 토큰과 세션에 대해 포스팅 해보자!

     

    Session이란

    웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 뜻한다.

    사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 한다.

    세션은 다른 보안 수단과 달리 서버 측에 데이터를 저장하고 세션의 키 값을 클라이언트에 저장하는 방식을 사용한다.

     

    Session 동작 순서

    Session은 session을 생성하는 요청-응답 처리와 이후 이 세션을 가지고 요청과 응답을 처리하는 2가지 방법으로 구성된다.

    1. 클라이언트에서 서버에 요청을 보낸다.
    2. 서버는 클라이언트를 식별하는 session id를 생성한다.
    3. 서버는 session id로 key와 value를 저장하는 Httpsession을 생성하고, session id를 저장하고있는 쿠키를 생성한다.
    4. 생성된 쿠키를 클라이언트에 전달한다.

    1. 클라이언트가 서버로부터 받은 session 쿠키를 담은 요청을 보낸다.
    2. 서버에서는 쿠키에 저장된 정보를 확인해 저장소에 담긴 정보를 확인한다.
    3. 확인 여하에 따라 요청에 대한 응답을 처리한다.

    session 특징

    1. session은 클라이언트가 서버에 접속하는 순간 생성된다.
      • 특별히 지정하지 않으면 세션의 유지 시간의 기본 값이 30분으로 설정된다.
      • 세션의 유지 시간이란 서버에 접속한 후 서버에 요청을 하지 않는 최대 시간이다.
      • 30분 이상 서버에 전혀 반응을 보이지 않으면 세션이 자동으로 끊어진다.
    2.  세션 데이터가 서버의 메모리에 저장되므로 확장 시 모든 서버가 접근할 수 있도록 하는 중앙 세션 관리 시스템이 필요하다.
      1. 중앙 세션 관리 시스템이 없으면, 시스템 확장에 어려움이 생긴다.
      2. 앙 세션 관리 시스템이 장애가 일어나면, 시스템 전체가 문제가 생긴다.
      3. 메모리에 세션 정보가 들어있다면, 메모리가 많이 사용될 수 있다.

    JWT란

     JSON Web Token의 약자로 전자 서명된 URL-safe의 JSON이다.

    말이 어려운데 JSON으로 전자 서명을 하여 URL-safe 문자열로 표현한 것이다라고 할 수 있다.

    JWT는 헤더, 페이로드, 서명이라는 3가지 점으로 구분하는 구조를 가지고 있다.

    1. 헤더
      • 헤더(Header)는 JWT를 어떻게 검증(Verify)하는가에 대한 내용을 담고 있다.
      • alg는 서명 시 사용하는 알고리즘이고, kid는 서명 시 사용하는 키(Public/Private Key)를 식별하는 값
    2. 페이로드
      • 토큰에 담을 내용을 뜻한다.
      • JWT에 대한 내용(토큰 생성자(클라이언트)의 정보, 생성 일시 등)이나 클라이언트와 서버 간 주고 받기로 한 값들로 구성된다.
    3. 서명
      • 서명은 헤더의 alg에 정의된 알고리즘과 비밀 키를 이용해 성성하고 Base64 URL-Safe로 인코딩한다.

    JWT 동작 순서

    1. 클라이언트에서 로그인 요청을 보냅니다.
    2. 서버에서 JWT를 만든다.
    3. 서버에서 만들어진 JWT를 클라이언트에 보낸다.
    4. 클라이언트는 요청 시 JWT를 담아서 요청을 보낸다.
    5. 서버는 서명을 확인하고 정보를 클라이언트에 제공한다.

    JWT 특징

    1. JWT 인증은 업계 표준 프로토콜 인 OAuth2를 이용한다.
      1. Login with Google , Login with Facebook 과 같은 service to service 로그인 옵션을 제공할 수 있다.
    2. 사용자 계정을 차단하거나 비활성화해야하는 경우 응용 프로그램은 잠금이 완전히 적용되도록 토큰이 만료 될 때까지 기다려야한다.
    3. 사용자가 비밀번호를 변경해야하는 경우 (예 : 계정 도용의 경우) 사전에 인증을 수행 한 경우 이전 비밀번호로 생성 된 토큰은 만료 될 때까지 유효합니다.
    4. 토큰 수명에 의해 만료가 되는 경우 재로그인을 해야하는 문제점이 발생할 수 있다.
      1. access token의 수명이 길면 해커에게 해독될 가능성이 있다.
      2. 짧은 수명은 refresh token으로 해결이 가능하다.
    5. 저장 방식이 2가지가 존재한다.
      1. local/session storage를 이용한 방식
      2. cookies를 이용한 방식

    오늘은 로그인 시 사용되는 기본적인 보안에 대해 알아봤다.

    보안관련 지식은 매번 공부할 때만 기억하고 이후에는 까먹는 경우가 많았는데 정리를 어느정도 해놨으니

    차후에는 내 블로그를 보면서 상기하면 될 것 같다

     

    참고 자료

    https://velog.io/@geunwoobaek/JWT%EB%9E%80

    https://yonghyunlee.gitlab.io/node/jwt/

    https://meetup.toast.com/posts/239

Designed by Tistory.