JWT가 실제로 사용되는 것

jwt 또는 JSON 웹 토큰은 웹 애플리케이션의 서버 측에서 생성되어 클라이언트 측으로 전달되는 임의로 생성된 문자열입니다. jwt 생성은 일반적으로 사용자가 올바른 사용자 이름과 암호를 제공하여 로그인하거나 새 사용자를 생성하여 트리거됩니다. 사용자 생성 또는 로그인에 대한 후속 요청에서 jwt는 클라이언트 측에서 검증된 서버로 다시 전달됩니다. 그래야만 클라이언트가 서버에서 요청된 리소스에 액세스할 수 있습니다.

모두 훌륭하지만 요점이 무엇입니까? jwt는 그것을 생성한 사용자 이름과 암호만큼만 안전하지 않습니까? 대답은 '예'입니다. jwt가 합법적인 자격 증명을 보유한 사용자가 보낸 http 요청에 추가 보안 계층을 제공한다는 것은 일반적인 오해입니다. 이것은 사실이 아닙니다.

jwt가 정말 빛을 발하는 곳은 이를 확인하는 데 사용되는 디지털 서명에 있습니다. 위에서 jwt가 무작위로 생성된다고 언급했지만 이는 부분적으로만 사실입니다. 생성에는 무작위 요소가 있지만(보안을 제공함) 실제로는 특정하고 표준화된 알고리즘을 사용하여 생성됩니다. 세부 사항에 너무 많이 들어가지 않고 jwt는 해당 값에 대한 상수 및 기타 변수의 혼합에 의존하는 종속 변수로 생각할 수 있습니다.

 **jwt**  =  algorithm(secret + payload) 

위 식에서 알고리즘 변수가 괄호 안의 변수에 수학적으로 분포되어 있다고 생각하면 됩니다. 실제로, 우리는 알고리즘의 매우 간단한 예로서 분배 속성을 사용하고 있습니다. 여기서 괄호 안의 변수가 변경되면 jwt의 값이 변경된다는 점에 유의하십시오. jwt는 괄호 안의 값에 대해 알고리즘을 실행하여 유효성을 검사합니다. 대부분의 사용 사례에서 페이로드는 클라이언트에서 얻은 사용자 데이터와 동일하며 비밀은 서버에서 생성되는 임의의 값입니다. 이것은 비밀과 페이로드에 대한 정확한 값을 알지 못하면 jwt를 복제할 수 없으며 비밀 키가 임의적이고 서버의 안전한 위치에 존재하기 때문에 jwt 자체가 없으면 jwt를 손상시키기가 매우 어렵다는 것을 의미합니다. 도난당했습니다.

알겠습니다. 하지만 이것이 우리에게 어떻게 도움이 됩니까? 누군가를 믿어 본 적이 있습니까? 그들이 신뢰하는 사람을 신뢰하는 경향이 있습니까? 이것이 바로 jwt가 들어오는 곳입니다. Google과 같은 웹 서비스를 사용하고 있고 (가정으로) 그들을 신뢰한다고 가정해 봅시다. 완전히 다른 다른 웹 서비스(회사 B라고 부름)를 시도하고 싶지만 모든 것에 사용하는 암호를 보호할지 확신할 수 없습니다. 아래로 스크롤하면 Google로 로그인할 수 있는 옵션이 있음을 알 수 있습니다. 완벽한. 이것이 의미하는 바는 Google과 이 다른 소프트웨어 회사가 인증을 허용하는 데 사용하는 공유 비밀 키를 가지고 있다는 것입니다. Google 계정에 로그인하면 Google은 결과 jwt를 회사 B로 보냅니다. 회사 B와 Google 모두 비밀에 액세스할 수 있으므로 모든 회사 B는 jwt가 실제로 Google에서 온 것인지 확인하기 위해 알고리즘을 실행합니다. 공유 비밀 및 페이로드를 확인하고 결과 jwt가 수신한 것과 동일한지 확인합니다.

그 결과 이제 사용자 이름과 암호를 제공하지 않고 회사 B에 로그인하게 됩니다. 그들이 액세스할 수 있는 것은 Google이 보낸 jwt와 공유 키뿐입니다. 이를 통해 기밀 정보가 존재하는 서버 수를 최소화하면서 광범위한 소프트웨어 서비스에 로그인할 수 있습니다.

출처:

https://security.stackexchange.com/questions/191894/whats-the-benefit-of-jwt-if-user-needs-to-send-his-credentials-once-anyway

https://developer.okta.com/blog/2018/06/20/what-happens-if-your-jwt-is-stolen

좋은 웹페이지 즐겨찾기