Token

»

Token

클라이언트에서 인증 정보를 보관하는 방법으로 고안된게 토큰 기반 인증입니다

토큰기반 인증 중 대표적인 JWT의 종류

  1. Access Token 보호된 정보들(유저의 이메일, 사진 등)에 접근할 수 있는 권한부여에 사용합니다
  2. Refresh Token Access Token의 유효기간이 만료된다면 Refresh Token을 통해 재발급받습니다

JWT 구조

![Token%202628a6c70936429d8312b5ee4fab06db/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2021-08-03%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.07.17.png](Token%202628a6c70936429d8312b5ee4fab06db/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2021-08-03%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.07.17.png)

  1. Header 어떤 종류의 토큰인지, 어떤 알고리즘으로 암호화 할지가 적혀있습니다

     {
       "alg": "HS256",
       "typ": "JWT"
     }
    
  2. Payload 정보가 담겨 있습니다. 어떤 정보에 접근 가능한지에 대한 권한을 담을 수도 있으며 사용자의 유저 이름 등 필요한 데이터는 이곳에 담아 암호화 시킵니다

     {
       "sub": "someInformation",
       "name": "phillip",
       "iat": 151623391
     }
    
  3. Signature 원하는 비밀키를 사용하여 암호화합니다

     HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);
    

JWT 사용법

[Node.js] JWT 사용하기

토큰기반 인증 절차

  1. 클라이언트가 서버에 아이디/비밀번호를 담아 로그인 요청을 보낸다.
  2. 아이디/비밀번호가 일치하는지 확인하고, 클라이언트에게 보낼 암호화된 토큰을 생성한다.
    • access/refresh 토큰을 모두 생성한다.
      • 토큰에 담길 정보(payload)는 유저를 식별할 정보, 권한이 부여된 카테고리(사진, 연락처, 기타등등)이 될 수 있다.
      • 두 종류의 토큰이 같은 정보를 담을 필요없다 (이 스프린트에서는 같은 정보를 담아줍시다).
  3. 토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장한다.
    • 저장하는 위치는 local storage, cookie, react의 state 등 다양하다.
  4. 클라이언트가 HTTP 헤더(authorization 헤더)에 토큰을 담아 보낸다.
  5. 서버는 토큰을 해독하여 "아 우리가 발급해준 토큰이 맞네!" 라는 판단이 될 경우, 클라이언트의 요청을 처리한 후 응답을 보내준다.

토큰기반 인증의 장점

  1. Statelessness & Scalability (무상태성 & 확장성)
    • 서버는 클라이언트에 대한 정보를 저장할 필요 없습니다 (토큰 해독이 되는지만 판단합니다)
    • 클라이언트는 새로운 요청을 보낼때마다 토큰을 헤더에 포함시키면 됩니다
      • 서버를 여러개 가지고 있는 서비스라면 더더욱 빛을 발휘합니다 (같은 토큰으로 여러 서버에서 인증 가능)
  2. 안전하다
    • 암호화 한 토큰을 사용하고, 암호화 키를 노출 할 필요가 없기 때문에 안전합니다
  3. 어디서나 생성 가능하다
    • 토큰을 확인하는 서버가 토큰을 만들어야 하는 법이 없습니다
    • 토큰 생성용 서버를 만들거나, 다른 회사에서 토큰관련 작업을 맡기는 것 등 다양한 활용이 가능합니다
  4. 권한 부여에 용이하다
    • 토큰의 payload(내용물) 안에 어떤 정보에 접근 가능한지 정할 수 있습니다
      • ex) 서비스의 사진과 연락처 사용권한만 부여