Spring & Spring Boot

[ JWT(Json Wen Token) ] 이란 무엇인가?

사과씨앗 2021. 4. 17. 15:30
728x90
반응형

안녕하세요 이번 글에서는 Jwt 대해서 알아보겠습니다

 

1. Jwt란? 

 

Jwt는 Json Wen Token의 약자로 JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token 이다.

서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다. 

 

 

2. Jwt 구성

 

Jwt는 Header,Playload, Signature 3부분으로 구성되어져 있다. 

 

Header

 

- Signature를 해싱하기 위한 알고리즘 정보들이 담겨있다.

 

Playload

 

- 서버와 클라이언트가 주고받는 시스템에서 실제로 사용될 정보에 대한 내용들을 담고 있습니다.

- 토큰에 담을 클레임(claim) 정보를 포함하고 있습니다. Playload 에 담은 정보의 한 '조각' 을 클레임이라고 부르고,

이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.

클레임의 정보는 등록된 클레임, 공개 클레임, 비공개 클레임으로 세 종류가 있습니다.

 

Signature 

 

- 토큰의 유효성 검증을 위한 문자열 이다.

- secret key를 포함하여 암호화되어 있습니다.

 

3. Jwt 과정

 

1. 사용자가 id password 입력하여 로그인을 시도합니다.

2. 서버는 요청을 확인하고 secret key 통해 Access token 발급합니다.

3. JWT 토큰을 클라이언트에 전달 합니다.

4. 클라이언트에서 API 요청할때  클라이언트가 Authorization header Access token 담아서 보냅니다.

5. 서버는 JWT Signature 체크하고 Payload로부터 사용자 정보를 확인해 데이터를 반환합니다.

6. 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공합니다.

 

원본 위치 <http://www.opennaru.com/opennaru-blog/jwt-json-web-token/>

 

 

4. Jwt 장단점

 

장점

 

- 중앙의 인증서버, 데이터 스토어에 대한 의존성 없음, 시스템 수평 확장 유리

- Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용 가능하여 범용성 좋다.

- 분산 마이크로 서비스 환경에서 중앙 집중식 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및 인가 방법을 제공합니다

 

단점

 

- Payload 정보가 많아지면 네트워크 사용량 증가, 데이터 설계 고려 필요

- 토큰이 클라이언트에 저장, 서버에서 클라이언트의 토큰을 조작할 없음

 

5. Jwt 활용

 

회원 인증: JWT 사용하는 가장 흔한 시나리오 입니다. 사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로한 토큰을 발급합니다.
그 후, 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 전달합니다. 서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 사용자가 요청한 작업에 권한이 있는지 확인하여 작업을 처리합니다.
서버에서는 사용자에 대한 세션을 유지 할 필요가 없습니다. 즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고, 사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서 서버 자원과 비용을 절감할 수 있습니다.

 

정보 교류: JWT 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법입니다. 이유는, 정보가 서명이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지, 정보가 도중에 조작되지는 않았는지 검증할 있습니다.

 

원본 위치 <http://www.opennaru.com/opennaru-blog/jwt-json-web-token/>

 

 

 

 

 

     

     

  

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형