개발을 해라

팀플) JWT토큰인증방식 배운 내용 정리 본문

🦁 멋쟁이 사자처럼

팀플) JWT토큰인증방식 배운 내용 정리

pgw_ 2022. 12. 4. 20:54
728x90

일주일에 한번씩 오프라인 팀 회의가 있는 날이다. 나는 학교 시험으로 디스코드를 통해 참여했고 오늘 배운 내용을 정리해본다.

 

 

 

 

인증방식 중

 

토큰인증방식과 세션인증방식이 있다.

 

세션인증방식은 보안은 좋으나 요즘에 잘 쓰이지 않고 토큰인증방식이 주로 사용된다.

 

 

토큰방식으로 예전에는 DB토큰방식이 쓰였다. 

말 그대로 db형식으로 토큰을 관리하는 것인데 맞는 토큰인지 확인하기 위해 일일히 db와 대조하고 확인하기 번거롭기에 요즘에는 잘 쓰이지 않는다고 한다.

 

요즘에는 JWT (Json Web Token)방식이 주로 사용된다. 여기서 앞글자 J는 Json으로 형식을 나타내는 글자다.

 

우리가 자주 볼 수 있는 <html> </html> 이런 꺽쇄가 들어가는 건 xml 형식으로, 저장할때 데이터사이즈가 커진다는 단점이 있다. 

 

Json 형식은 중괄호 대괄호가 사용되었으며 이런방식 -> [{ id : ~~ }]  xml보다 데이터 사이즈가 작다.

 

또한 프로그래밍언어로 유연하게 다루기 편하고 데이터스키마 수정이 자유로워 JWT방식에서 사용되고 있다.

 

 

 

 

 

 

다시 돌아와서, JWT토큰방식은 장부조회없이 계산 상으로 확인이 가능하다.

또한 Database를 Client가 관리하며 API 서버와 통신을 한다.

 

Client는 Database를 읽을 수만 있으며 수정은 불가능하다. 수정하기 위해서는 서버에서만 가능하다. 

 

 

jwt.io

 

 

{Header}.{Payload}.{Signature}

 

Header : 어떤 타입의 Data, 어떤 암호화와 해싱 알고리즘을 사용하는지 정보를 담고 있다.

 

Payload : 보관할 데이터 (클라이언트의 정보)

 

Signature : Header와 Payload를 조합하고 비밀키를 활용해 만들어낸 해시값, Header와 Payload가 조작되었는지 여부를 확인할 수 있는지 알 수 있는 Data

(Client는 건드릴 필요가 없고 그냥 주고받는 데이터이다. 전적으로 서버에서만 관리한다는 특징이 있다.)

 

 

 

 

 

 

예를 들어, 

 

 

유저가 Payload값을 임의로 변경했다고 하자. Client가 바뀐 정보를 가지고 서버에 왔다면 먼저 Signature값을 활용해 조작되었는지 여부를 확인한다. 

 

서버는 유저가 보낸 Header와 Signature를 이용해 직접 Signature를 만든다. 그 후 유저가 기존에 보내왔던 Signature값과 비교를 하고

만약 값이 다르다면 조작된 것임을 알 수 있다.

 

 

 

비밀키는 서버에서만 알고 있어야 하며 만약 유출 될 경우 보안상 큰 이슈가 발생한다.

 

728x90
Comments