Android JSON Web Token (JWT)

노준혁·2023년 6월 19일

https://jwt.io/
https://ohmycode9328.tistory.com/12
https://blog.outsider.ne.kr/1160
https://blog.naver.com/PostView.nhn?blogId=jjdo1994&logNo=222248092091
https://proandroiddev.com/jwt-authentication-and-refresh-token-in-android-with-retrofit-interceptor-authenticator-da021f7f7534


JSON Web Token

  • 당사자 간 인증 정보를 암호화하여 JSON 객체로 안전하게 전송하기 위한 독립적인 방법을 정의하는 open standard (RFC 7519)
    • 인증 정보를 암호화하여 전달
    • 쿠키에 비해 안전
    • 서버 자원을 사용하지 않음
    • HTTP 헤더에 담아서 전달하면 클라이언트 서버 간의 통신방식이 간단

언제 JSON 토큰을 사용하는가

  • 권한 부여
    사용자가 로그인하면 이후의 각 요청에 JWT가 포함되어 사용자가 해당 토큰으로 허용된 경로, 서비스 및 리소스에 액세스 가능
  • 정보 교환
    공개/개인 키 쌍을 사용해 JWT에 서명할 수 있기에 보낸 사람이 누구인지 확인 가능
    헤더와 페이로드를 사용해 서명을 계산 -> 콘텐츠가 위변조 되었는지 확인 가능

JSON 토큰 구조

간단한 형태의 JSON 웹 토큰은 점( .)으로 구분된 세 부분으로 구성됨.

  • (JWT 토큰을 어떻게 해석해야 하는지 명시)
  • Payload
  • Signature

JWT는 일반적으로 다음과 같다.
xxxxx.yyyyy.zzzzz

ex) eyJhbJciOqKUzI1NdsnCsJI6IkpXVCJ9.eyEc35kOiJKb2huIERvZSIsImdqS5MDQwMDAwMCwidXNlcmqb2huIiwiYWdlIjoyNSwdsaWF0IjoxNDQyNjU0fQ.jzvWdy1QgWzkKsEFeRlSwyvC7Z4NVAvtfedqwZ0Q31We


JWT 장단점

  • JWT 또한 세션ID 등 다른 임시암호 처리 방식과 비교해 마찬가지로, 완전한 안전성을 보장 받기란 어렵다.

  • JWT access token에 대한 탈취 가능성을 고려해 refresh token이 존재하지만, refresh token 역시 탈취 가능성이 존재한다. 보안적인 부분에서 단점이 있지만, 모바일 환경에서는 웹 환경보다는 보안적인 부분에서 비교적 이점이 있다는 점을 고려해야 한다.

  • 장점:

    • 인증을 위한 별도의 저장소가 필요 없다.
    • 빠른 인증 처리
    • Header 와 Payload를 통해 Signature 생성 -> 데이터 위변조 방지 가능
    • 확장성이 높음
  • 단점:

    • 토큰의 길이가 길수록 -> 네트워크 부하 증가
    • Payload 자체는 암호화 안되기에 중요한 정보를 담아 주고 받기 어렵다.
    • 토큰 탈취 가능성은 여전히 존재함.

세션과의 차이점

  1. 상태 저장 없음 (Stateless): JWT는 자체 포함적인 토큰으로, 모든 인증 정보를 토큰 자체에 포함시키기에 서버 측에서는 추가적인 상태를 유지할 필요가 없으며, 이는 확장성 측면에서 유리
    그러나, 세션 ID를 사용하면 서버 측에서 세션 정보를 저장해야 한다.
  2. 분산 시스템 지원: JWT는 상태가 없으므로 여러 서비스나 시스템 간에 쉽게 전달 가능 → 이로 인해 마이크로서비스 아키텍처와 같은 분산 시스템에서 유용. 세션 ID의 경우, 각 서비스가 세션 상태를 공유해야 하므로 구현이 복잡해질 가능성 존재
  3. 모바일 애플리케이션 호환성: JWT는 모바일 애플리케이션과의 통신에 적합하다. 세션 기반 인증의 경우, 쿠키를 사용해야하는데, 이는 모바일 환경에서 제한적일 수 있기 때문.
  4. 크로스 도메인 요청: JWT는 크로스 도메인 요청에 잘 동작. 쿠키를 사용하는 세션 ID 방식은 Same-Origin Policy로 인해 크로스 도메인 요청에 제약 존재 가능성.
  5. 사용자 정보 포함: JWT는 payload에 사용자 정보를 포함시킬 수 있다. 이를 통해 클라이언트에 추가적인 정보를 제공할 수 있고, 서버가 해당 정보를 다시 조회할 필요가 없음.
profile
https://github.com/nohjunh

0개의 댓글