ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [웹] 인증(authentication) 인가(authorization) 의 개념과 쿠키&세션과 JWT(토큰)방식에 대해 알아보자
    웹 개발/개념 2022. 4. 24. 13:31
    반응형

    1. 인증 (authentication)

    로그인 과정으로 사용자가 누구인지를 확인하는 절차를 말함
    서버는 데이터 베이스에 저장된 사용자 계정의 해쉬값과 사용자 암호의 복잡한 알고리즘으로 계산한 값과 일치하는지 확인함


    2. 인가 (authorization)

    사용자가 내 계정으로만 가능한 리소스에 접근하려는 사용자의 요청에 대해 권한을 확인하는 절차를 말함


    웹 사이트를 이용할 때 쓰는 HTTP는 '서버가 클라이언트 상태를 보존하지 않는' Stateless 프로토콜이다.
    클라이언트에서 보내는 요청들은 모두 독립적이며,
    서버는 클라이언트의 요청에 response만 보내고 사용자 정보에 대해 기억하지 못한다.
    따라서 이미 로그인을 했더라도 사용자가 새로운 요청을 할 때마다 로그인 과정을 거쳐야한다.

    이 번거로운 과정을 안하기 위해
    쿠키(Cookie) & 세션(Session), JWT 토큰 방식을 사용해 사용자 정보를 저장한다.


    1. 쿠키(Cookie) & 세션(Session) 방식


    쿠키
    서버는 쿠키를 사용해 브라우저에 인증정보 뿐 아니라 데이터도 넣을 수 있다.
    1) 서버는 브라우저에 응답할 때 쿠키를 넣어 보내고,
    2) 브라우저는 그 이후 요청을 할 때 쿠키와 함께 서버로 보낸다.

    쿠키는 도메인에 따라 제한되며 서버가 사용 기한을 정해서 유효기간이 있다. 또한 쿠키는 브라우저에만 존재해 네이티브 앱에는 사용할 수 없다.

    세션
    로그인 과정에서 비밀번호가 일치하면 세션 db에 유저 정보를 생성
    1) 세션에는 별도의 id가 있다. 해당 세션 id는 쿠키를 통해 브라우저에 돌아오고 저장된다.
    2) 새로운 요청을 할 때는 브라우저가 쿠키를 서버를 보내고
    3) 서버는 쿠키 속의 세션 id를 가지고 세션 db를 확인한다.
    4) 그리고 해당 id는 세션 db의 유저를 알게 된다.

    세션 db에 현재 로그인된 모든 세션 id들이 저장되어 있기 때문에,
    현재 로그인된 유저 수를 확인하거나 강제 로그아웃 시키는 등의 유저관리가 필요한 서비스에는 유용하게 쓰인다.
    하지만 유저가 많을수록 db 리소스가 많이 필요하다. (주로 radis를 사용함)



    2. JWT 토큰


    JWT는 토큰 기반의 인증이다. 클라이언트가 보내는 토큰이 맞는지 유효한지 검증하기 때문에
    별도의 db나 서버가 필요하지 않다.

    1) 사용자가 로그인을 하면 서버는 JWT 형태의 토큰을 발급해주고
    2) 클라이언트는 토큰을 브라우저에 저장한다.
    3) 그 후 새로운 요청을 할 때 토큰을 HTTP 헤더에 넣어 서버에 보내고,
    4) 서버는 암호화된 토큰을 검증한 후 사용자의 권한을 확인하고 인가 허가를 내려준다.

    JWT 토큰은 인코딩 혹은 암호화된 데이터를 3가지를 이어붙인 것으로 header, payload, signiture 로 구성된다.
    - header : 고정값인 토큰의 타입(=JWT)과 signiture 값을 만들기 위한 알고리즘 정보 두 가지 정보가 들어있다.
    - payload : 사용자에게 공개하고자 하는 정보(claim)가 담겨있다.
    - signiture : 1번 헤더와 2번 페이로드 , 서버에 숨겨진 secrete key을 함께 알고리즘에 넣고 돌리면 3번의 signiture 값이 나온다.



    * JWT 를 저장하는 storage
    https://ko.javascript.info/localstorage

    localStorage와 sessionStorage

    ko.javascript.info




    참고자료
    https://youtu.be/tosLBcAX1vk
    https://www.youtube.com/watch?v=tosLBcAX1vk
    https://d-dual.tistory.com/3
    https://akdl911215.tistory.com/290
    https://enjoyinjoanne.tistory.com/67

    반응형

    '웹 개발 > 개념' 카테고리의 다른 글

    검색기능 개선  (0) 2022.12.08
    [배포] vercel의 환경변수 설정  (0) 2022.07.13

    댓글

Designed by Tistory.