Token

안정태·2021년 5월 27일
0

Study

목록 보기
33/33

🪙 Token, 왜 쓸까?

세션기반 인증 = 서버(혹은 DB)에 유저 정보를 담는 방식

위 같은 세션기반 인증이 주는 부담을 클라이언트에게 넘겨줄 방법을 고안해서 나온 것이 대표적으로 토큰기반 인증 JWT(JSON Web Token)이다.

여기서 토큰은 유저 정보를 암호화한 상태로 담을 수 있고, 암호화했기 때문에 위험성이 낮다.

JWT

종류
Access Token : 보호된 정보들에 접근할 수 있는 권한부여에 사용
Refresh Token : Access Token 유효기간이 만료되면 새로운 Access Token을 발급 받는다.

JSON 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰


ex)

  1. Header
{"alg":"HS256", "typ":"JWT"}
  1. Payload
{"sub":"someInformation",
 "name":"phillip",
 "iat":15162339}
  1. Signature
HMACSHA256(
  base64UrlEncode(header)+"."+
  base64UrlEncode(payload),
  secret
)

절차

  1. 클라이언트가 서버에 아이디/비번을 담아 로그인 요청을 한다.

  2. 아이디/비번이 일치하는지 보고, 클라이언트에 보낼 암호화된 토큰을 생성
    Access/Refresh 토큰 둘다 생성

  3. 토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장한다.

  4. 클라이언트가 HTTP 헤더에 토큰을 담아 보낸다.

  5. 서버는 토큰을 해독하여 인증이될 경우, 클라이언트의 요청을 처리한 후 응답 해준다.

장점

  • Statelessness & Scalability (무상태성 & 확장성)
    서버는 클라이언트에 대한 정보를 저장할 필요가 없다.
    토큰을 헤더에 추가함으로 인증절차 완료

  • 안정성
    암호화 한 토큰을 사용
    암호화 키를 노출 할 필요 X

  • 어디서나 생성 가능
    토큰을 생성하는 서버가 꼭 토큰을 만들지 않아도 됨

  • 권한 부여에 용이
    토큰의 내용물 안에 어떤 정보에 접근 가능한지 정의

profile
코딩하는 펭귄

0개의 댓글