장점


(1)사용이 쉽다.

(2)서버 개발 부담을 덜어 준다.

(3)보안

- 애플리케이션의 보안을 높일 수 있지만 무조건 위험을 벗어나는 것은 아니다.


(4) 모바일 환경에 적합하다.

- (웹에서 쿠키와같은 데이터로 인증안해도됨)


(5)Stateless 서버 (무상태)

- 즉 연결 유지를 하지 않아도 데이터를 가지고 올 수 있다.

- 토큰 값만 알고 있다면, 서버로부터 토큰값과 함께 데이터를 요청할 수 있다.







단점


(1)길이

- Claim에 넣는 데이터가 많아질 수록, JWT 토큰의 길이가 길어진다.

- API 호출 시 매 호출마다 헤더에 붙어서 가야하기 때문에, 길이가 길다는 것은 그만큼 네트워크 대역폭 낭비가 심하다는 의미이다.


(2) 한번 발급된 토큰은 값을 수정하거나 폐기가 불가

- JWT는 토큰 내에 모든 정보를 다 가지고 있기 때문에, 한번 발급된 토큰에 대한 변경은 서버에서는 더 이상 불가능하다. 예를 들어 토큰을 잘못 발행해서 삭제하고 싶더라도, Signature만 맞으면 맞는 토큰으로 인식을 하기 때문에, 서버에서는 한번 발급된 토큰의 정보를 바꾸는 일등이 불가능하다.

그래서 만약에 JWT를 쓴다면, Expire time을 꼭 명시적으로 두도록 하고, refresh token등을 이용해서, 중간중간 토큰을 재발행하도록 해야 한다.



(3)보안

JWT는 기본적으로 Claim에 대한 정보를 암호화 하지 않는다. 단순히 BASE64인코딩만 하기 때문에, 중간에 패킷을 가로채거나, 기타 방법으로 토큰을 취득했으면 토큰 내부 정보를 통해서 사용자 정보가 누출 될 수 있는 가능성이 있다


특히 자바스크립트 기반의 웹 클라이언트의 경우 브라우져상의 디버거등을 통해서 토큰이 노출될 가능성이 높다.


그래서, 이를 보완하는 방법으로는 토큰 자체를 암호화 하는 방법이 있다. JSON을 암호화 하기 위한 스펙으로는 JWE(JSON Web Encryption)





=> 위와 같은 단점에도 불구하고 폐쇄성이 높은 APPLE에서 JWT를 사용한다는 것은 위의 단점을 모두 커버했을 뿐 아니라 적절하게 이용되고 있을 것이라고 생각하다. 










+ Recent posts