프로젝트를 진행하면서, 인증 방식에 대해 고민을 해봤을 때가 있었다.
그중에서도 JWT 토큰 인증 방식을 사용하게 되었는데,
JWT란 무엇인지, 사용하면 장점이 무엇이 있는지에 대해 간단히 알아보자.
1) JWT(Json Web Token)란?
: 인증에 필요한 정보들을 암호화시킨 JSON 토큰으로, 인터넷 표준 인증 방식이다.
- JWT는 유저를 인증하고 식별하기 위한 토큰(Token) 기반 인증이다.
- 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함된다.
- RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있다.
- 세션(Session)을 사용하게 될 경우 쿠키 등을 통해 사용자를 식별하고 서버에 세션을 저장했지만, 토큰을 클라이언트에 저장하고 요청시 HTTP 헤더에 토큰을 첨부하는 것만으로도 단순하게 데이터를 요청하고 응답받을 수 있다.
2) JWT의 구조
: JWT는 Header, Payload, Signature로 구성된다.
각 요소는 . 으로 구분된다.
2-1) Header (헤더)
: 서명 시 사용하는 키(kid), 사용할 타입(typ), 서명 암호화 알고리즘(alg)의 정보가 담겨 있다.
- kid : 서명 시 사용하는 키(Public/Private Key)를 식별하는 값
- typ : 토큰 유형
- alg : 서명 암호화 알고리즘 HS256(HMAC SHA-256), HS512, RS256(RSASSA SHA-256), ES256(ECDSA P-256 curve SHA-256)
2-2) Payload (페이로드)
: 토큰에서 사용할 정보의 조각들인 클레임(Claim)이 담겨 있다.
- iss : 토큰 발급자(issuer) – Public Claims
- sub : 토큰 제목(subject) – Public Claims
- iat : 토큰 발급 시간(issued at) – Public Claims
- exp : 토큰 만료 시간(expiration) – Public Claims
- roles : 권한 – Private Cliams
2-3) Signature (서명)
: Header(헤더) 에서 정의한 알고리즘 방식(alg)을 활용한다.
Header(헤더)+ 페이로드(Payload)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화한다.
2-4) JWT 토큰 복호화
: https://jwt.io/
해당 웹사이트에 접속하면, 암호화된 JWT 토큰을 복호화해볼 수 있다.
3) 장단점
3-1) 장점
- 로컬에 저장하기 때문에 서버 용량에 영향을 끼치거나 받지 않는다.
- 보다 안전하다. (공개키/개인키 or 비밀키를 통해 서명되기 때문에)
- 모바일 앱에서 사용하기 적합하다.
=> 모바일 앱은 여러 플랫폼 및 기기에서 동작할 수 있고, 서로 다른 도메인에서 통신할 수도 있다.
이때 JWT를 사용하면 플랫폼 독립적으로 사용자 인증을 처리할 수 있기 때문에 적합하다. - 네트워크 부하가 적다.
=> http헤더나 url 파라미터를 통해 간단하게 전송되기 때문이다.
3-2) 단점
- 토큰의 크기가 커질수록 트래픽에 영향을 미칠 수 있다.
- 토큰은 발급되면 만료 기간 변경이 불가능하므로 토큰 만료 처리를 구현해야 한다.
[reference]
https://blog.bizspring.co.kr/%ED%85%8C%ED%81%AC/jwt-json-web-token-%EA%B5%AC%EC%A1%B0-%EC%82%AC%EC%9A%A9/
http://www.opennaru.com/opennaru-blog/jwt-json-web-token/
https://velog.io/@chuu1019/%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-JWTJson-Web-Token
'Dev Knowledge' 카테고리의 다른 글
[명명규칙] 표기법 (카멜 케이스, 파스칼 케이스, 스네이크 케이스, 케밥 케이스) (0) | 2025.03.21 |
---|