JWT는 JSON Web Token 방식을 의미한다.
토큰이란?
- 클라이언트가 서버에 접속을 하면, 서버에서 클라이언트에 인증되었다는 "토큰" 을 부여함
- 세션은 서버의 메모리를 사용해야 하지만, 토큰은 클라이언트에 저장이 되어 서버의 부담을 덜 수 있다.
- 토큰 자체에 데이터가 들어있다.
- 앱과 서버가 통신 할 때 가장 많이 사용된다. ( 쿠키와 세션이 없기 때문 )
1. 사용자가 로그인을 하고, 서버는 사용자에거 유일한 토큰을 발급
2. 클라이언트는 토큰을 저장해 둔 뒤, 서버에 요청시 토큰을 포함해서 요청
3. 서버는 토큰을 검증하고 응답
단점
- 토큰 자체의 데이터가 길어, 네트워크 부하 가능성이 있다.
- 중요한 정보는 담을 수 없다
- 탈취를 당하면 대처하기 어렵다.
JWT 란?
- 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.
JWT = Header + Payload + Signature
Header : JWT 에서 사용할 타입 + 해시 알고리즘의 종류
Payload : 서버에서 첨부한 사용자 권한 정보와 데이터
보통 Registered claims + Public claims + Private claims
Signature : Header, Payload 를 Base64 URL-safe Encode 를 한 이후 Header 에 명시된 해시함수를 적용하고,
개인키(Private Key)로 서명한 전자서명
1. 사용자가 로그인 인증 요청
2. 서버는 Header, PayLoad, Signature 을 정의 하고 이를 암호화한 JWT 를 생성
3. JWT 를 쿠키에 담아 클라이언트에게 발금
4. 클라이언트는 JWT 를 로컬 스토리지에 저정함
5. 클라이언트는 요청시 JWT 를 포함해서 요청을 보냄
장점
- 데이터 위변조를 막을 수 있다.
- 별도의 저장소가 필요 없다.
- 서버는 StateLess 한 상태가 가능하다.
- 토큰을 기반으로 다른 로그인 시스템에 접근, 권한 공유가 가능하다.
'🟢 개념 정리 > CS' 카테고리의 다른 글
| RESTful 서비스란? (0) | 2023.03.27 |
|---|---|
| Access Token과 Refresh Token (0) | 2023.03.25 |
| 쿠키, 세션 (0) | 2023.03.22 |
| RSA (0) | 2023.03.22 |
| OAuth (0) | 2023.03.20 |