Authentication - JWT

Verba volant, scripta manent·2021년 4월 15일
0

JWT 란?

풀네임 Json Web Token.
Json 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰을 뜻한다.

번외 : 자꾸 JMT 토큰이라고 읽고쓰게된다.ㅋㅋㅋㅋㅋㅋ

JWT의 구조

1. Header

  • 어떤 종류의 토큰인가?
  • 어떤 알고리즘으로 암호화 하는가?
    ex)
{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload

  • 유저의 정보
  • 권한을 부여 받았는가?
  • 기타 필요한 정보
    ex)
{
  "sub": "someInformation",
  "name": "phillip",
  "iat": 151623391
}

3. Signature

  • Header, Payload를 base64인코딩한 값과 salt값의 조합으로 암호화된 값
    ex)
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);

토큰기반 인증 절차

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

토큰기반 인증의 장점

1 . Statelessness & Scalability (무상태성 & 확장성)

서버는 클라이언트에 대한 정보를 저장할 필요가 없다.
토큰을 헤더에 추가함으로 인증절차가 완료됨.

2 . 안전하다

암호화 한 토큰을 사용하고, 암호화 키를 노출 할 필요가 없기 때문!

3 . 어디서나 생성 가능하다

토큰을 확인하는 서버가 토큰을 꼭 만들지 않아도 된다.

4 . 권한 부여에 용이하다

토큰의 payload(내용물) 안에 어떤 정보에 접근 가능한지 정할 수 있다.
ex) 서비스의 사진과 연락처 사용권한만 부여

profile
말은 사라지지만 기록은 남는다

0개의 댓글