이 기사는 Python의 JWT에 대한 간략한 소개를 제공합니다. 이는 특정 참조 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
Json 웹 토큰(JWT)은 웹 애플리케이션 환경 간 청구 전송을 위해 구현된 JSON 기반 개방형 표준(RFC 7519)입니다. 토큰은 컴팩트하고 안전하게 설계되었으며 특히 Single Sign-On의 분산에 적합합니다. (SSO) 사이트 시나리오에서 JWT 클레임은 일반적으로 리소스 서버에서 리소스를 쉽게 얻을 수 있도록 ID 공급자와 서비스 공급자 간에 인증된 사용자 ID 정보를 전달하는 데 사용되며 논리에 필요한 몇 가지 추가 서비스 선언 정보를 추가할 수도 있습니다. 토큰은 인증에 직접 사용될 수도 있고 암호화될 수도 있습니다.
세션 인증에 따른 문제
세션: 각 사용자가 애플리케이션에 의해 인증된 후 애플리케이션은 사용자의 다음 식별을 용이하게 하기 위해 기록을 생성해야 합니다. 일반적으로 세션은 인증된 사용자 수가 증가함에 따라 서버의 오버헤드가 크게 증가합니다.
확장성: 사용자 인증 후에는 인증 기록이 저장됩니다. 메모리에서 이는 승인된 리소스를 얻기 위해 사용자가 이 서버에서 다음 요청을 요청해야 함을 의미하므로 분산 애플리케이션에서는 그에 따라 로드 밸런서의 기능이 제한됩니다. 이는 또한 애플리케이션의 확장성을 제한한다는 의미입니다.
CSRF: 사용자 식별은 쿠키를 기반으로 하기 때문에 쿠키가 가로채면 사용자는 사이트 간 요청 위조 공격에 취약해집니다.
JWT의 구성은
첫 번째 부분을 헤더라고 하며 두 번째 부분은 다음과 같습니다. 세 번째 부분은 서명입니다.
header
jwt의 헤더에는 두 가지 정보 부분이 있습니다.
선언 유형, 여기는 jwt입니다.
암호화 알고리즘 선언은 일반적으로 HMAC SHA256을 직접 사용합니다.
전체 헤더는 다음과 같습니다. 다음 JSON:
{ 'typ': 'JWT', 'alg': 'HS256' }
첫 번째 부분을 구성하는 base64 암호화가 수행됩니다(암호화는 대칭적으로 해독 가능).
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
payload
페이로드는 유효한 정보가 저장되는 곳입니다. 구체적으로 항공기에 탑재된 물품을 참조하세요. 유효한 정보에는 세 부분이 포함됩니다.
표준에 등록된 진술
공개 진술
개인 진술
표준에 등록된 진술(권장되지만 필수는 아님):
iss: jwt issuer
sub: jwt 사용자 for who
aud: jwt를 수신하는 당사자
exp: 이 만료 시간은 발급 시간보다 커야 합니다.
nbf: jwt를 사용할 수 없는 시간을 정의합니다. jwt 발급 시간
jti: jwt Identity의 고유성은 주로 재생 공격을 피하기 위해 일회성 토큰으로 사용됩니다.
서명
JWT의 세 번째 부분은 비자 정보입니다. 이 비자 정보는 세 부분으로 구성됩니다.
페이로드(base64 이후)
secret
이 부분에는 base64 암호화 헤더와 base64 암호화가 필요합니다. 연결로 구성된 문자열을 생성하고 헤더에 선언된 암호화 방법을 통해 솔트된 비밀 조합을 암호화한 후 jwt의 세 번째 부분을 구성합니다.
이 세 부분을 . 따라서 이는 서버의 개인 키이므로 어떠한 경우에도 노출되어서는 안 됩니다. 클라이언트가 이 비밀을 알게 되면 클라이언트가 jwt에 자체 서명할 수 있다는 의미입니다.
장점
페이로드 부분으로 인해 JWT는 다른 비즈니스 로직에 필요한 중요하지 않은 일부 정보를 자체적으로 저장할 수 있습니다.
전송이 용이합니다. jwt의 구조는 매우 간단하고 바이트 크기가 매우 작기 때문에 전송이 매우 쉽습니다.
서버 측에 세션 정보를 저장할 필요가 없어 확장 적용이 용이하다
보안 관련
jwt의 페이로드 부분은 복호화가 가능한 부분이므로 민감한 정보를 저장해서는 안 된다. 고객.
비밀 개인 키를 보호하세요. 이 개인 키는 매우 중요합니다.
가능하다면 https 프로토콜을 사용해 주세요
위 내용은 Python의 JWT에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!