ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 애플리케이션의 인증 방식
    CS 2024. 8. 2. 15:19

    시작하며

    더보기

      이전 글에서 인증과 인가, 웹 애플리케이션 인증의 특수성(비연결성, 무상태)에 대해서 정리해 보았다. 무상태성을 유지하면서도 클라이언트의 상태를 관리하기 위해 쿠키, 토큰, 세션 스토리지 등을 활용한다고 하였는데, 어떤 흐름으로 상태가 관리되는지(인증이 진행되는지) 2가지 방법에 대해서 글을 써보려 한다.

      일반적으로 웹 애플리케이션은 쿠키-세션 방식, JWT 방식을 통해서 인증을 처리한다. 이번 글에서는 2가지 인증 방식에 대해 소개하고, 구현 방법 등에 대해서는 다른 글에서 구체적으로 설명하겠다.

     

    목차

     

    1. 쿠키-세션 방식의 인증

      쿠키-세션 방식은 '특정 유저가 로그인되었다.'는 상태를 저장하는 방식이다. 인증과 관련된 아주 약간의 정보만 서버가 소유하고 있고, 유저의 이전 상태의 전부는 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념이다.

      아래 그림을 통해 흐름에 대해서 설명하도록 하겠다.

     

    그림  완성 후 삽입 예정

     

    ① 사용자가 로그인을 하면 클라이언트는 서버에게 로그인 요청을 보낸다.

    ② 서버는 DB의 User테이블에서 요청이 온 아이디와 비밀번호를 대조해 본다.

    ③ User테이블의 정보와 일치하면 인증이 통과된 것이고, 세션 저장소에 해당 User가 로그인되었다는 정보를 넣는다.

    ④ 세션 저장소에서는 임의의 값으로 세션 id를 발급한다.

    ⑤ 발급된 세션 id를 로그인 요청에 대한 응답으로 클라이언트에게 보낸다.

    ⑥ 클라이언트는 응답받은 세션 id를 쿠키에 보관하고, 요청이 있을 때마다 세션 id를 HTTP헤더에 담아 같이 보낸다.

    ⑦ 서버는 클라이언트의 요청으로부터 쿠키를 발견했다면, 쿠키에서 세션 id를 추출해 세션 저장소에서 검증한다.

    ⑧ 검증에 성공해 User 정보를 받아오면 해당 사용자는 로그인이 되어 있는 사용자이다.

    ⑨ 이후에는 로그인이 된 User에 맞는 적절한(요청에 따른) 응답을 제공한다.

     

    2. JWT 기반 인증

      JWT(JSON Web Token)이란 인증에 필요한 정보들을 암호화시킨 토큰을 말한다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT토큰(Access Token)을 HTTP 헤더에 실어서 서버가 클라이언트를 식별한다.

      JWT 또한 아래 그림을 통해 흐름에 대해서 설명하겠다.

     

    그림 완성 후 삽입 예정

     

    ① 사용자가 로그인을 하면 클라이언트는 서버에게 로그인 요청을 보낸다.

    ② 서버는 DB의 User테이블에서 요청이 온 아이디와 비밀번호를 대조해 본다.

    ③ User테이블의 정보와 일치하면 인증이 통과된 것이고, 해당 User의 정보 등을 payload에 담아서 JWT토큰(Access Token)을 발급한다.

    ④ 발급된 JWT토큰(Access Token)을 로그인 요청에 대한 응답으로 클라이언트에게 보낸다.

    ⑤ 클라이언트는 응답받은 JWT토큰을 저장소(쿠키, 로컬 스토리지 등)에 저장하고, 요청이 있을 때마다 JWT토큰을 쿠키 또는 HTTP헤더에 담아 같이 보낸다.

    ⑥ 서버는 클라이언트의 요청으로부터 토큰을 발견했다면, JWT 토큰을 검증한다.

    ⑦ 검증에 성공하면, 이후에는 로그인이 된 User에 맞는 적절한(요청에 따른) 응답을 제공한다.

     

     

    마치며

    더보기

      웹 애플리케이션의 인증 방식 2가지에 대해서 살펴보았다. 뭔가 비슷하면서도 다른 점이 있었는데, 쿠키-세션 방식은 서버에 세션 저장소가 있었지만, JWT 방식은 서버에 그런 저장소가 없었다는 게 가장 큰 차이가 아닐까 싶다.

      세션 id와 JWT토큰 모두 검증이 필요한데, 세션 id는 세션 저장소에서 조회하여 검증이 진행된다. 반면, JWT 토큰은 토큰 자체를 파싱 해서 검증이 진행된다. 이 검증에 대한 차이 때문에 저장소의 유무에서 차이가 발생하는 것 같다.

      다음 글에서는 서버 측에서 어떤 식으로 검증이 진행되는지, 구체적으로 코드와 함께 정리해 보겠다.

Designed by Tistory.