JWT

김재민·2021년 8월 8일
0

JWT( JSON WEB TOKEN)

JWT란 서버와 클라이언트 간 정보를 주고 받을 때 HTTP Request Header에 넣어 주는 JSON 토큰을 말한다. 토큰을 사용하여 서버는 별도의 인증 과정 없이 토큰 정보만으로 인증을 처리할 수 있게 된다.

JWT의 종류

1. Access Token
2. Refresh Token

Access token은 보호된 정보들(유저의 이메일, 연락처, 사진 등)에 접근할 수 있는 권한부여에 사용한다. 클라이언트가 처음 인증을 받게 될때(로그인 시), access, refresh token 두가지를 다 받지만, 실제로 권한을 얻는 데 사용하는 토큰은 access token 이다.

JWT 구조

1.Header

Header는 이것이 어떤 종류의 토큰인지, 어떤 알고리즘으로 sign(암호화)할지가 적혀있다.
JSON Web Token이라는 이름에 걸맞게 Json형태로 이런 형태를 볼 수 있다.

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload

Payload에는 정보가 담겨 있다. 어떤 정보에 접근 가능한지에 대한 권한을 담을 수도 있고, 사용자의 유저 이름 등 필요한 데이터는 이곳에 담아 암호화 시킨다. 물론 암호화(헤더에서 정의한)가 될 정보지만, 민감한 정보는 되도록 담지 않는 것이 좋다.

{
  "sub": "someInformation",
  "name": "phillip",
  "iat": 151623391
}


3. Signature

Signature은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드다.
서명은 위에서 만든 헤더와 페이로드의 값을 각각 BASE64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고 이값을 다시 인코딩하여 생성한다.

JWT과정 & 토큰기반 인증절차

JWT는 권한 부여에 굉장히 유용하다. 새로 다운받은 A라는 앱이 Gmail과 연동되어 이메일을 읽어와야 한다고 생각해 봤을때

  1. Gmail인증서버에 로그인정보(아이디, 비밀번호)를 제공한다.
  2. 성공적으로 인증시 JWT를 발급받는다.
  3. A앱은 JWT를 사용해 해당 유저의 Gmail 이메일을 읽거나 사용할 수 있다.

토큰기반 인증 절차

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

2. 아이디/비밀번호가 일치하는지 확인하고, 클라이언트에게 보낼 암호화된 토큰을 생성한다.
👉 access/refresh 토큰을 모두 생성한다.
토큰에 담길 정보는 유저를 식별할 정보,권한이 부여된 카테고리(사진,연락처,기타등등)

3. 토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장한다.
👉 저장위치는 local storage, cookie, react의 state 등 다양하다.

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

5. 서버는 토큰을 해독하여 토큰이 맞는지 안맞는지 판단을 내려 클라이언트에게 요청을 처리한 응답을 보내준다.

profile
Junior Front-end engineer

0개의 댓글