Search
🔐

인증 및 인가에 JWT 를 사용하는 이유는 뭘까?

태그
JWT

JWT 의 다섯 가지 특징

1. 자가 포함형(Self-Contained)

JWT는 필요한 모든 정보를 자체적으로 포함합니다. 이는 서버가 세션 상태를 유지할 필요가 없다는 것을 의미하며, 이를 무상태(stateless) 라고 합니다. 이로 인해 서버의 부하를 줄이고 확장성을 높일 수 있습니다.

2. 보안

JWT 는 디지털 서명되어 있습니다. 일반적으로 HMAC 알고리즘 또는 RSA 의 공개키/개인키 쌍을 사용하여 서명됩니다. 이 서명은 토큰의 데이터가 중간에 변경되지 않았음을 보장합니다.

시크릿키와 디지털 서명은 다른 개념!

디지털 서명
디지털 서명은 전자 문서나 메시지에 첨부되어, 발신자의 정체성을 확인하고 메시지가 전송 중에 변경되지 않았음 을 증명하는 데 사용됩니다. 이는 일반적으로 암호화 알고리즘을 사용하여 생성됩니다.
시크릿키 (Secret Key)
시크릿키는 대칭키 암호화에서 사용 되는 단일 키를 의미합니다. 여기서 대칭키 란 암호화와 복호화에 동일한 키가 사용된다는 것을 말합니다. 시크릿키는 보통 안전한 방식으로만 공유되어야 하며, 누출되지 않도록 보호되어야 합니다.

JWT 서명 생성 방식

JWT 에서 디지털 서명은 토큰의 유효성을 검증하는 데 사용됩니다. JWT 의 서명 부분은 토큰이 변경되지 않았음 을 보증합니다. JWT 서명은 두 가지 방법으로 생성될 수 있습니다.
HMAC (Hash-based Message Authentication Code)
이 방식에서는 시크릿키를 사용하여 JWT 의 페이 로드와 헤더를 서명합니다. 이 경우, 동일한 시크릿키를 사용하여 서명을 검증합니다.
RSA or ECDSA (공개키/개인키 암호화 방식)
이 방식에서는 개인키를 사용하여 JWT 를 서명하고, 공개키를 사용하여 서명을 검증합니다. 이 경우, 서명을 생성하기 위한 키와 검증하기 위한 키가 다릅니다.
결론적으로, JWT 에서 사용 되는 디지털 서명은 데이터의 무결성을 보증하는 방법이며, HMAC 방식을 사용하는 경우 이 서명은 시크릿키를 사용하여 생성됩니다.

3. 유연성

JWT 는 여러 종류의 데이터를 담을 수 있으며, 이는 인증에 필요한 정보를 쉽게 전송할 수 있게 합니다. 또한, 다양한 시스템 간에 쉽게 전송될 수 있어서 시스템 간 인증에서 유용합니다.

4. 효율성

JWT 는 웹 환경에서 쉽게 사용될 수 있습니다. 예를 들어, HTTP 헤더를 통해 전송될 수 있으며, 크로스 도메인 요청 에서도 문제가 없습니다.

5. 확장성 및 모듈성

다양한 인증 및 인가 시나리오에 맞게 JWT 를 확장하거나 수정하는 것이 비교적 쉽습니다. 이는 다양한 서비스와 애플리케이션에 적용될 수 있도록 만듭니다.

결론

JWT 의 디지털 서명이 존재하여 자체적으로 인증 / 인가에 필요한 정보를 포함하고 있기 때문에 서버가 세션상태를 유지할 필요가 없습니다. 또한 여러 종류의 데이터 정보를 담을 수 있으며 다양한 방식으로 전송이 가능하기 때문에 효율성이 좋습니다. 이러한 장점 때문에 토큰을 인증 / 인가 단계에서 JWT 토큰을 사용합니다. 하지만 관리를 제대로 하지 않으면 보안적으로 문제가 생길 수 있기 때문에 주의 해야 합니다.