Home JWT 로그인 방식이란
Post
Cancel

JWT 로그인 방식이란


jwt란?

jwt는 JSON Web Token의 약자로 인증에 필요한 정보들을 암호화시킨 토큰을 말하며 accessToken으로 사용한다.
jwt를 생성하기 위해서는 Header(헤더), Payload(페이로드), VerigySignature(서명) 객체가 필요하다.

jwt의 구성

Header

어떠한 알고리즘으로 암호화 할 것인지, 어떠한 토큰을 사용할 것 인지에 대한 정보가 들어있다.

1
2
3
4
{
  'alg': 'HS256',
  'typ': 'JWT'
}
Payload

Payload는 토큰에 담을 정보를 포함합니다. 백엔드에서 사용자의 이름이나 사용자의 권한을 담아준다면 디코딩해서 사용 가능하다. 디코딩 방법

1
2
3
4
5
6
{
  'sub': '1234567890',
  'name': 'John Doe',
  'admin': true,
  'iat': 1516239022
}
Verify Signature

Verify Signature는 Payload가 위변조되지 않았다는 사실을 증명하는 문자열입니다. Base64 방식으로 인코딩한 Header, Payload 그리고 SECRET KEY를 더한 후 서명됩니다.

1
2
3
4
5
HMACSHA256 {
  base64UrlEncode(header) + '.' +
  base64UrlEncode(payload),
  your-256-bit-secret
}


Access Token + Refresh Token

accessToken만 사용하면 보안에 취약한데 유효기간을 짧게하면 보안성은 올라가지만 사용자는 로그인을 자주 해야해서 새로운 accessToken을 발급받아야 하는데 그것을 해결해주는게 refreshToken이다.

  • 1. (Front) 사용자 로그인 요청
  • 2. (Back) server에서는 DB에서 회원 값을 비교
  • 3. (Back) 값이 일치한다면 accessToken, refreshToken을 발급하여 응답 Header에 실어 보낸다. 이때 일반적으로 DB에 refreshToken을 저장해둡니다.
  • 4. (Front) refreshToken을 안전한 저장소에 저장 후 accessToken을 권한이 필요한 요청 Header에 실어 보낸다.
  • 5. (Back) accessToken을 검증하여 성공시 데이터 보내주기
  • 6. (Back) accessToken이 만료됬다면 권한 없음을 보낸다.
  • 7. (Front) refreshToken, accessToken을 Header에 실어 보낸다.
  • 8. (Back) accessToken이 조작되지 않았는지 확인한 후 Header의 refreshToken과 사용자의 DB에 저장되어 있던 refreshToken을 비교 refreshToken이 동일하고 유효기간도 지나지 않았다면 새로운 accessToken을 발급해줍니다.
  • 9. (Back) 새로운 accessToken을 Header에 실어 다시 API 요청을 진행

마치며

혹시 잘못된 정보나 궁금하신 게 있다면 편하게 댓글 달아주세요.
지적이나 피드백은 언제나 환영입니다.

This post is licensed under CC BY 4.0 by the author.