안녕하세요. 이번 블로그에선 Json Web Token에 대해 작성해보도록 하겠습니다.
JWT 란?
- 인증에 필요한 정보를 암호화한 토큰을 의미 합니다. JWT 기반 인증은 HTTP 헤더에 토큰을 실어 클라이언트를 인식합니다.
JWT를 알기 전에 JWT가 나오게 된 배경에 대해 간단하게 확인하겠습니다.
JWT가 나오기 전엔 세션 인증을 사용해 클라이언트를 인식하고 데이터 통신을 하였습니다.
세션 인증 방식에 대해 간단히 짚고 넘어가도록 하겠습니다.
Session 인증
- 인증에 필요한 정보를 클라이언트에 저장하는것이 아닌 서버에서 저장해 클라이언트를 관리하게 됩니다.
- 로그인 인증하는 것을 예시로 그림으로 확인해보겠습니다.
이런식으로 로그인 요청할때 서버에서 세션을 생성하고 서버측에서 세션 ID를 저장해놓고 응답할때 클라이언트에선 세션 ID를 저장하게 됩니다.
세션 인증 방식의 단점
- 해커가 Session Id를 탈취하더라도 유의미한 정보를 가지고 있진 않지만 Session Id를 탈취해 클라이언트인척 위장 할 수 있다는 단점을 가지고 있습니다.
- Session을 서버측에서 저장하고 관리 하다보니 많은 요청이 있고 접속자가 많으면 서버 부하가 심해질 수 있다는 단점도 있습니다
세션 인증방식은 서버측에서 관리하다보니 서버 비용이 많이 듭니다. 이런 단점을 해결하기 위해 JWT 인증 토큰이 만들어지게 된겁니다.
JWT 토큰의 구성요소를 알고 동작원리에 대해 설명드리겠습니다.
JWT 토큰 구성요소
- JWT토큰은 헤더(Header) , 정보(Payload), 서명(Signature) 세 파트로 나누어져있습니다.
- Header에는 어떠한 방식으로 암호화 할지에 대한 정보를 포함하고있습니다.
- Payload에는 클레임이라고 부르는 전달하고자하는 정보가 들어있습니다. payload에는 수정이 가능하여 여러 데이터를 추가할 수 있지만 노출과 수정이 가능한 지점이기에 민감한정보(id,password)와 같은 정보를 담지 않고 권한의 범위나 토큰 발급일,만료일자만을 담아야 합니다.
- Signature에는 가장 중요한 부분으로 헤더와 정보를 합친 후 발급해준 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만들어줍니다. 만약 토큰이 발급된 후 누군가가 Payload의 정보를 수정하면 Payload에는 조작된 정보가 들어가 있지만 Signatute에는 수정되기 전의 Payload 내용을 기반으로 이미 암호화 되어있는 결과가 저장되어 있기 때문에 조작되어있는 Payload와는 다른 결과값이 나오게 됩니다. 이를 통해 조작 유무를 파악하기 쉽고 악용하기 어려워져 보안이 강화됩니다.
JWT 동작 원리
토큰 기반 인증방식은 사용자의 인증이 완료된 이후에 토큰을 발급합니다. 클라이언트쪽에서는 전달받은 토큰을 저장해두고 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달하게 됩니다. 그 이후 서버는 토큰을 검증하고 응답하는 방식으로 작동하게 됩니다.
.
'Server' 카테고리의 다른 글
AWS EC2에 APM 설치하기 (1) | 2024.01.19 |
---|---|
TCP 에 대해 ( 3way handshake / 4way handshake) (0) | 2023.08.13 |
Socket 통신에 대해서(HTTP 통신과 비교) (1) | 2022.08.18 |
#1 서버(Server) 와 클라이언트(Client)이해하기 (0) | 2022.08.10 |
Context Switching이란? (0) | 2022.08.07 |
댓글