필자는 상당히 깊이있는 express-stormpath 에서 인증을 처리하는 노드 라이브러리의 저자 이므로 여기에서 정보를 얻을 것입니다.
우선, JWT는 일반적으로 암호화 되지 않습니다 . 암호화 JWT를 할 수있는 방법이 있지만 (참조 : JWEs을 )이 여러 가지 이유로 실제로는 매우 일반적인 아닙니다.
다음으로, 모든 형태의 인증 (JWT 사용 여부에 관계없이)에는 MitM 공격 (man-in-the-middle) 공격이 적용됩니다. 이러한 공격은 인터넷을 통해 요청을 할 때 공격자가 네트워크 트래픽을 볼 수있을 때 발생합니다. 이것은 ISP가 볼 수있는 것, NSA 등입니다.
이것이 SSL을 막는 데 도움이되는 것입니다 : 컴퓨터에서 네트워크 트래픽을 암호화하여-> 인증 할 때 일부 서버, 네트워크 트래픽을 모니터링하는 제 3자는 토큰, 암호 등을 볼 수 없습니다. 서버의 개인 SSL 키 사본을 얻을 수 있습니다. 이것이 모든 형태의 인증에 SSL이 반드시 필요한 이유입니다.
그러나 누군가 SSL을 악용하고 토큰을 볼 수 있다고 가정 해 봅시다. 질문에 대한 대답은 예입니다 . 공격자 는 해당 토큰을 사용하여 귀하를 사칭하고 서버에 요청할 수 있습니다.
이제 프로토콜이 들어옵니다.
JWT는 인증 토큰에 대한 하나의 표준입니다. 그들은 거의 아무것도 사용할 수 있습니다. JWT가 멋진 이유는 추가 정보를 포함시킬 수 있고 아무도 정보를 엉망으로 만들지 않았기 때문에 서명 할 수 있기 때문입니다.
그러나 JWT 자체는 '보안'과 관련이 없습니다. 모든 의도와 목적을 위해, JWT는 API 키와 거의 동일합니다. 어딘가의 서버에 대해 인증하는 데 사용하는 임의의 문자열입니다.
질문을 더욱 흥미롭게 만드는 것은 사용중인 프로토콜 (대부분 OAuth2)입니다.
OAuth2가 작동하는 방식은 클라이언트에게 짧은 시간 동안 만 인증을 위해 임시 토큰 (예 : JWT!)을 제공하도록 설계되었습니다!
아이디어는 토큰을 도난당한 경우 공격자가 단기간 동안 만 토큰을 사용할 수 있다는 것입니다.
OAuth2를 사용하면 사용자 이름 / 암호 또는 API 자격 증명을 제공 한 다음 토큰을 교환하여 서버와 함께 자신을 다시 인증해야합니다.
이 프로세스는 때때로 발생하기 때문에 토큰이 자주 변경되어 공격자가 큰 어려움을 겪지 않고 지속적으로 당신을 사칭하기가 어렵습니다.
희망적으로 이것은 도움이됩니다 ^^