서비스를 구현할 때 빠질 수 없는 요소 중 하나는 Authorization, 인증 기능이다.
이때 사용하는 JWT와 Access Token, Refresh Token 에 대한 개념을 간단히 정리해보자
🔗: jwt.io
JWT (JSON Web Token) 는 RFC 7519 웹 표준을 따르고 있으며, 이름에서 보여지듯 JSON 객체로 구성되어 있다.
여러 곳에 사용할 수 있지만 주로 인증 및 권한 부여 등에 사용된다.
비교적 단순하고 스스로에 대한 정보를 포함하고 있어(self-contained) 널리 쓰이고 있으며, JSON 객체로 보안이 필요한 정보를 주고 받을 수 있다.
JWT는 xxx.yyy.zzz
와 같은 형식으로 이루어져있다. 차례대로 헤더, 페이로드, 서명 파트이다.
typ
과 서명 알고리즘을 나타내는 alg
필드로 이루어져 있다. JSON 형식으로 인코딩되고, Base64로 인코딩된 문자열이다.{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
⚠️ 페이로드에는 비밀번호와 같이 보안이 필요한 정보를 담으면 안된다. 암호화 하여 전달하는 것이 아니라 단순 디코딩 후 전달하기 때문!
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
{secretKey}
)
헤더에 어떤 종류의 알고리즘을 사용하여 암호화하는지 명시한다.
HMAC 과 같은 해싱 secret key 알고리즘을 통해 암호화할 수도 있고, RSA 와 같은 공개키 알고리즘을 사용하기도 한다.