JWT
- Json Web Token의 약자
- 모바일 · 웹 사용자 인증을 위해 사용하는 암호화된 토큰
- Request에 JWT를 함께 전송
JWT 구조
- Request에 함께 보내지기 때문에 URL에서 파라미터로 사용 가능하도록 URL_Safe 한 Base64 인코딩을 함
[Header].[Payload].[Signature]
Header
- 토큰의 타입 / 해시 암호화 알고리즘
{
"typ" : "JWT",
"alg" : "HS256"
}
Payload
- 토큰에 담을 정보
- 이 영역 정보의 단위 : Claim (클레임) - name/value 한 쌍
- 클레임의 종류 : 등록된(Registered) 클레임, 공개(Public) 클레임, 비공개(Private) 클레임
{
"sub" : "12312341234", // 등록된 클레임
"name" : "John", // 비공개 클레임
"lat" : 12341234 // 등록된 클레임
}
1. iss (Issuer) : 토큰 발급자
2. sub (Subject) : 토큰 제목 - 토큰에서 사용자에 대한 식별 값
3. aud (Audience) : 토큰 대상자
4. exp (Expiration Time) : 토큰 만료 시간
5. nbf (Not Before) : 토큰 활성화 날짜 (이 전까지는 활성화 않음)
6. iat (Issued At) : 토큰 발급 시간
7. jti (JWT Id) : JWT 토큰 식별자 (issuer가 여러명일때 이를 구분)
Signature
- (Header + base64) + (Payload + base64) + Secret Key)로 생성
- JWT 백엔드에서 발행
- 각 요청시 서명이 확인되어 Header나 Payload의 변조 여부를 확인, 변조시 Token 무효화
기존 인증 / 인가 방식과의 차이
- 서버가 클라이언트의 세션 정보를 담고 있어야만 인증이 가능하여 서버에게 부담이 갈 수 있다.
- stateless하여 유저의 정보를 서버나 세션에 담지 않음
+ 여러 플랫폼 및 도메인 어플리케이션 규모가 커지면 여러 디바이스를 호환 시키고 더 많은 종류의 서비스 제공 가능. 토큰만 유효하다면.. 으로 확장 가능
단점
- Claim의 데이터가 많아질 수록 토큰의 길이가 길어짐. API 호출할 때 마다 토큰을 주고 받기 때문에 대역폭 낭비 가능
- Payload 암호화 없음. 중요 데이터를 넣어선 안됨.
https://brunch.co.kr/@jinyoungchoi95/1
JWT(Json Web Token) 알아가기
jwt가 생겨난 이유부터 jwt의 실제 구조까지 | 사실 꾸준히 작성하고 싶었던 글이지만 JWT를 제대로 개념을 정리하고 구현을 진행해본 적이 없었는데 리얼월드 프로젝트를 진행하면서 JWT에 대한
brunch.co.kr
https://tech.toktokhan.dev/2021/04/30/JWT/
JWT란 무엇인가
JWT 안녕하세요 똑똑한 개발자에서 백엔드 개발을 하고 있는 김영환 입니다. JMT졸맛탱이 아니라 JWT😝 웹 개발을 진행하다보면 빠질수 없는 인증 / 인가 .. JWT에 대해서 소개해보도록 하겠습니다.
tech.toktokhan.dev
'개념정리 > WEB Hacking 개념 정리' 카테고리의 다른 글
역직렬화 취약점 (0) | 2022.03.06 |
---|---|
XSS 구분 & 공격 구문 (0) | 2022.03.02 |
직렬화 & 역직렬화 취약점 (0) | 2022.02.23 |
http Header (0) | 2022.02.23 |