JWT 란?
- JSON Web Token의 약자로, 인증에 필요한 정보들을 암호화시킨 JSON TOKEN을 의미한다.
- JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이고, 토큰 내부에는 개인키를 통한 전자 서명이 포함된다.
JWT를 통한 인증 과정
- 클라이언트는 로그인 아이디와 패스워드를 입력하여 서버에 로그인 요청
- 서버에서 서명된 JWT 토큰을 생성하여 응답 헤더에 저장하여 클라이언트에게 반환
- 클라이언트는 응답으로 반환된 JWT 토큰을 사용하여 요청마다 Http Header에 JWT 토큰을 담아서 요청
- 서버에서는 Http Request Header의 JWT를 검증하여 토큰이 유효한지 검증 후 요청에 맞는 응답 반환
JWT의 구조
- Header
- 보통 토큰의 타입이나 전자 서명시 사용된 알고리즘이 사용되었는지 저장
- Payload
- Claim이라는 토큰에서 사용할 정보들을 저장
- 인증 시에 토큰에서 실제로 사용될 정보를 의미
- Payload에는 암호화가 되어 있지 않기 때문에, 비밀번호와 같은 민감한 정보를 담지 않아야 한다.
- Signature
- JWT Signature는 암호화가 되어 있기 때문에, 디코딩을 하더라도 실제 서명부는 나오지 않고, 암호화의 구조만 볼 수 있다.
- 아래 암호화된 구조를 보면, base64UrlEncode를 사용하여 header와 payload를 암호화한 것을 알 수 있으며, your-256-bit-secret로 서버가 가지고 있는 개인키를 통해 암호화되어 있음을 알 수 있다.
- 서버가 가지고 있는 개인키를 통해 암호화가 되어 있기 때문에 외부에서는 Signature를 복호화할 수 없다.
JWT 인증 과정
- 클라이언트가 Http Request Header에 JWT 토큰을 담아서 서버에게 요청
- 서버에서는 Http Request Header에서 JWT 토큰을 추출한다.
- 서버가 가지고 있는 개인키를 가지고 JWT의 Signature을 복호화한다.
- 복호화한 Signature의 base64UrlEncode(header), base64UrlEncode(payload)가 JWT 토큰의 header, payload와 일치하는지 검증한다.
AccessToken과 RefreshToken
- 위에서 설명한 JWT 토큰은 인증 시 사용되는 AccessToken를 뜻한다.
- RefreshToken 등장 배경
- 해커가 JWT AccessToken을 탈취하면 해커는 AccessToken을 사용하여 모든 접근이 가능하다.
- 이는 AccessToken의 유효 기간을 짧게하여 해결할 수 있다.
- 하지만 AccessToken의 유효 기간을 짧게 설정하게 되면 사용자 입장에서는 번거롭게 다시 로그인을 해서 AccessToken을 발급받아야 한다.
- 이를 해결하기 위해 RefreshToken은 인증이 아닌, AccessToken을 재발급해주는 역할을 한다.
- AccessToken은 인증 처리 역할을 하며, RefreshToken은 AccessToken을 재발급하는 역할을 한다.
- 동작 과정
- AccessToken의 유효 기간을 1일, RefreshToken의 유효 기간은 7일
- AccessToken이 1시간이 지나 만료 후 클라이언트가 요청을 보낼 때, 서버에서는 RefreshToken 검증 단계에 진입한다.
- RefreshToken이 유효하다면, 서버는 AccessToken을 발행하여 클라이언트에게 전달하고, 클라이언트는 해당 AccessToken을 받아 재요청을 한다.
- 따라서 사용자는 1시간이 지나도 재로그인을 할 필요 없다.
- RefreshToken는 클라이언트가 아닌 서버 DB에 저장되기 때문에 해커의 탈취 위험이 적다.?????
'정리' 카테고리의 다른 글
[친절한 SQL 튜닝] 데이터 저장 구조 및 I/O 메커니즘 (1) | 2024.02.03 |
---|---|
[Java] JVM 정리 (JVM의 개념, 실행과정, 구조) (0) | 2023.07.12 |
[DB] 트랜잭션 정리 (0) | 2023.06.17 |
[DB] Index 정리 (0) | 2023.06.13 |
CORS(Cross-Origin Resource Sharing) 이해와 적용 (1) | 2023.06.08 |