SESSION vs. TOKEN

beablessing·2021년 8월 6일
0

server

목록 보기
7/8
post-thumbnail

세션

과정

  1. Authentication

    • ct가 로그인+something 요청 → db에 있는 정보라면 server는 session ID 생성.

    • session ID하나를 ct(쿠키)로 보낸다. 그리고 서버에도 하나 가지고 있음.(userid저장)

      [req.session.save](http://req.session.save) :: 세션에 userId를 저장.

  1. Authorization
    - ct가 썸띵 요청시 (예를들어, userInfo) → 로그인 성공시 실패시 둘로 나눠서 응답을 줘야함

    ```jsx
    이때, 로그인확인 
    > session객체에 값이 있는 경우 ! (서버의 userid===sessionID) 
    > athentication 된것으로 판단
    ```
    
    - 로그인이 확인되면, db에서 요청정보를 찾아서  ct에게 응답해준다.

토큰

과정

  1. Authentication
    - CT가 (헤더에 타입을 실어서) 요청을 보냄 → db에 있는 유저라면, 액세스/리프레시 토큰 생성

    (    sign(  data,   비밀키,    만료일 등의 옵션 )  → data = 요청 해당 유저의 인포 )    
    
    ```jsx
    액세스 토큰 : state  (res.send)
    리프레시 토큰 : 쿠키!  (res.cookie)
    ```
  2. Authorization
    - CT가 userinfo를 서버에 요청!

    	포인트 : 헤더에 토큰과, 타입을 고정값으록 보내주어야 한다.

    • server는 보낸 토큰을 받아서, 액세스 토큰의 유효성을 판별하여

    • 유효시/유효하지않을시 나눠서 응답을 해야함.

      ( verify 메소드 : ct보낸 토큰값, 환경변수에 지정해둔 액세스비밀키 )

      =⇒ 유효시 액세스토큰값반환

        - 유효시 ct요청 정보를 db에서 찾아서 정보가 있다면,  `res.json`으로 정보를 보내준다.
  1. 액세스토큰 갱신하기

    • ct가 리프레시토큰에 요청을 보냄 get

    • 서버는 리프레시 토큰이 존재하는지 1차로 확인하고 존재한다면,

    • //// 2차로 리프레시토큰의 유효성을 판별(verify)

    • 리프레시토큰이 유효하다면

      →  (찾은정보= 요청에 대조하는 정보) 를 데이터에 다시 담아서 액세스토큰을 생성 
      
      → 새 액세스토큰을 담아서 res.json한다. 그러면 ct  쿠키가 가지고 있는 토큰값 갱신
profile
프론트엔드 개발자

0개의 댓글