JWT토큰
- JWT(JSON Web Token)란?
유저를 인증하고 식별하기 위한 토큰 기반 인증.
- JWT 특징 :
1) 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함됨. 별도의 인증 저장소가 필요없다는 장점.
2) RESTful 과 같은 무상태인 환경에서 사용자 데이터를 주고 받을 수 있음.
3) JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이 포함됨.
4) 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명 있음. 즉 사용자가 JWT를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되고, 검증 완료 시 요청한 응답을 돌려줌.
5) 더 많은 필드가 추가되면 토큰이 커질 수 있음.
6) 비상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있다는 단점.
- JWT 순서 :
1) 클라이언트 사용자가 계정, 암호를 통해 웹서비스 인증
2) 서버에서 '서명된(Signed) JWT'를 생성해 클라이언트에 응답으로 돌려줌
3) 클라이언트가 서버에 데이터를 추가적으로 요구할 때 JWT를 HTTP Header에 첨부.
4) 서버에서 클라이언트로 온 JWT를 검증.
- JWT 구조
1) Header : 토큰타입 지정, 암호화 알고리즘(HMAC, SHA256, RSA) 방식 지정.
{
"typ": JWT,
"alg": "HS256"
}
2) Payload : 사용자의 데이터나 권한이 있음.
3) Signature : 개인키(Private Key)로 서명한 전자서명 담겨있음.
* '세션'은 쿠키 등을 통해 식별하고 서버에 저장함.
* '토큰'은 세션과 달리 서버가 아닌 클라이언트에 저장됨.
메모리나 스토리지 등을 통해서 세션을 관리했던 서버의 부담을 덜 수 있음.
* '전자서명'은 비대칭 암호화 알고리즘 사용. 암호화는 개인키, 복호화(검증)에는 공개키 사용.
세션 vs 토큰
- 세션(Session)
1. 별도의 ID가 있음.
2. 서버는 세션ID를 가져온 쿠키를 통해 세션DB를 휘저음. 이후 서버로부터 보내진 세션은 쿠키를 통해 브라우저로 돌아오고 저장됨. 해당 요청이 끝나고 다른 페이지로 이동하면 동일 과정이 반복됨. (중요한 유저 정보는 모두 서버에 있음. 유저가 갖고 있는 건 세션ID 뿐임.)
3. 세션DB에는 모든 유저의 정보가 저장돼있어야 함. 즉 유저가 늘어남에 따라서 DB 리소스가 더 늘어나야 함.
- 토큰(Token)
1. 이상하게 생긴 String.
2. 서버에 가면 서버는 세션DB에서 해당 토큰과 일치하는 유저를 찾음.
3. JWT로 유저 인증을 처리하면 서버는 세션ID를 가질 필요가 없음. (유저 정보 모두를 일일히 세션DB에 저장할 필요 없음.) -> 자바 Spring Framework는 JWT Token. -> JWT는 암호화되지 않음. 즉, 비밀정보를 JWT 안에 두면 안 됨.
plus) 쿠키(Cookie)란?
- 쿠키를 브라우저에 저장하고 해당 웹사이트에 방문할 때마다 브라우저는 쿠키와 요청을 함께 서버에 보냄. 그러면 서버가 쿠키를 이용해서 브라우저에 데이터 넣을 수 있음.
- 도메인에 따라서 쿠키가 제한 됨. 구글 관련 쿠키는 구글에서만 사용 가능.
- 유효기간 있음. 기간은 서버가 정함.
'Today I Learned' 카테고리의 다른 글
[CS] 모두를 위한 컴퓨터 과학 / 학습 노트 (0) | 2025.02.16 |
---|---|
[DB] 이클립스, DBeaver(, AWS) DB 서버 연동 방법 / 학습 노트 (0) | 2022.08.21 |
[D3] 이클립스 오류 해결 방법, 참고 사이트 모음 / 학습 노트 (0) | 2021.08.18 |
[DB] Oracle 관리자모드 접속 방법, SQL Developer 연결 오류 / 학습 노트 (0) | 2021.06.02 |
[Java] Spring Annotation, Migration Tools, RestTemplate으로 API 생성 / 학습 노트 (0) | 2021.03.11 |