[Network] Token & JWT(JSON Web Token)

민수·2023년 1월 17일
0
post-thumbnail

Token 기반 인증

Token 기반 인증 방식은 Cookie와 Session의 단점들을 보완하기 위해 도입이 되었다.

  • Cookie의 단점인 클라이언트에서 위변조가 가능한 점을 보안
  • Session의 단점인 동시 접속자 수가 많을 수록 서버의 부하가 커지는 점을 보안

Token이란?


이미지 출처
비행기 티켓 같은 것으로 생각 할 수 있다.
비행기를 타기 위해서는 티켓이 있어야만 탈 수 있고 서버에서 요청을 해서 데이터를 얻기 위해서는 Token이 있어야만 한다.
티켓에는 좌석과 게이트 번호 출발 시간등의 정보가 담겨있고 Token에는 암호화된 데이터가 담겨있다.

Token 기반 인증의 동작 방식


1. 클라이언트가 로그인 정보를 요청 바디에 담아 서버에게 보낸다.
2. 서버는 바디에 담긴 정보를 DB에 조회를 한다.
3. 조회한 값이 유효하면 Token을 생성한다.
4. 생성한 Token을 클라이언트에게 전달한다.
5. 클라이언트는 서버에 데이터 요청시 Token을 요청 헤더에 넣어서 보낸다.
6. 서버는 토큰이 자신이 발급한 토큰인지 유효한 토큰인지 검증을 한다.
7. 서버는 검증에 성공하면 클라이언트가 요청한 데이터를 전달한다.

Token 기반 인증의 장점

  • 클라이언트에 저장되기 때문에 서버가 추가되어도 인증이 가능함
  • 서버는 암호화 된 토큰을 생성해서 클라이언트에게 전달만 하면 됨
  • 토큰에 특정 권한을 심을 수 있음
  • 변조가 어려움

Token 기반 인증의 단점

  • Payload 자체는 암호화 되지 않기 때문에 중요한 정보를 담을 수 없음
  • Token 자체를 탈취해 인증을 요청하면 인증이 뚫림

JWT (JSON Web Token)

웹 표준 RFC 7519에 등록된 방식으로 가장 많이 사용하는 Token 기반 인증 방식이다.
인증에 필요한 정보들을 암호화시킨 JSON 토큰이다.

JWT 구조

  • Header : JWT에서 사용할 타입과 해시 알고리즘 종류
  • Payload : 서버에서 첨부한 사용자 권한 정보와 데이터
  • Signature : Header와 Payload를 Base64 URL로 Encoding 한 후 .을 붙여 xxx.xxx 형태를 만든 후 Header에 명시한 해시 알고리즘으로 암호화를 하는데 시크릿키를 추가해서 암호화 함

JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식

주의할 점

  • Header에 사용할 해시 알고리즘을 none으로 만들면 안된다.
  • Payload에 유저의 민감한 정보를 넣으면 안된다.
  • 시크릿 키는 길고 예측하기 어렵게 작성하고 공유 해서는 안된다.

참조

https://victorydntmd.tistory.com/115
https://victorydntmd.tistory.com/286
https://c-yhhhhh.tistory.com/145
https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
https://about-tech.tistory.com/entry/Security-JWT-%ED%86%A0%ED%81%B0-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EC%9D%B4%EB%9E%80

0개의 댓글