JSON 웹 토큰 튜토리얼 및 Python 예

4699 단어 djangopythonjwt
사이트의 전통적인 인증 모델은 쿠키 기반의 인증을 사용해 왔다.일반적인 REST 아키텍처에서 서버는 클라이언트 상태를 유지하지 않습니다.REST의 무상태 방법으로 인해 세션 쿠키는 보안상 적합하지 않습니다.세션 납치와 크로스 사이트 요청 위조는 쿠키를 사용하여 REST 서비스를 보호할 때 흔히 볼 수 있는 안전 문제입니다.따라서 무상태 REST 서비스에 대한 인증 및 보안이 필요합니다.
본 논문에서는 JSON 웹 토큰을 사용하여 REST API를 보호하는 방법을 배울 것입니다.JSON 웹 토큰은 개방적인 업계 표준RFC 7519 방법으로 쌍방 간에 안전하게 성명을 표시하는 데 사용된다.JWT는 공교롭게도 Firebase, 구글, 마이크로소프트, Zendesk 등의 지원을 받았다.

비유로 이해하다


우리는 모두 차용증 한 장을 가지고 있다.일단 ATM기에 접속하면 우리는 돈을 인출할 수 있다.차용증은 내 계좌에만 들어갈 수 있고 기한이 지난 후에는 사용할 수 없다.JSON 웹 토큰과 유사합니다. 인증 시스템에 토큰을 삽입하고 제한된 데이터에 접근할 수 있습니다.

JWT 작업


JWT를 사용하여 인증을 할 때, 브라우저의 로컬 저장소나 세션 저장소에 영패를 저장합니다.취소하려면 영패만 삭제하면 됩니다.다른 증명할 만한 것은 없다.이런 방법으로 신분 검증을 하는 장점 중 하나는 영패가 데이터베이스에 오래 존재하지 않기 때문에 신분 검증을 할 때 세션 저장을 조회할 필요가 없다는 것이다.
이 간단한 삽화를 빌려 보도록 하겠습니다. -

JWT의 구조


JSON 웹 토큰의 예:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0b3B0YWwuY29tI iwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluI jp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0.yRQYnWzskCZUxPwaQupWk iUzKELZ49eM7oWxAQK_ZXw
세 부분이 a로 분리되어 있기 때문에,각 섹션의 작성 방식은 다릅니다.우리는 세 가지 부분이 있다.
  • 수확대
  • 유효 하중
  • 서명

  • <base64-encoded header>.<base64-encoded payload>.<base64-encoded signature>
    제목
    JWT 헤더 성명 인코딩의 대상은 JSON 웹 영패(JWT)이고, JWT는 HMAC SHA-256 알고리즘을 사용하여 MACE를 진행하는 JWS이다.예:
    {
        “alg”: “HS256”,
        “typ”: “JWT”
    }
    
    "alg"는 영패에 서명하는 알고리즘을 지정하는 문자열입니다.
    "typ"은 영패의 문자열입니다. 기본값은 "JWT"입니다.이것은 JWT 영패라고 지정합니다.
    유효 하중 (클레임)
    성명이나 유효 하중은 실체에 대한 성명으로 정의할 수 있으며 안전 정보와 영패 자체에 대한 추가 메타데이터를 포함한다.
    다음은 클레임 속성입니다.
  • iss: 토큰의 발행인
  • sub: 영패의 주제
  • 호주달러: 토큰의 관중
  • qsh: 검색 문자열 해시
  • exp: Unix 시간에 정의된 영패 만료 시간
  • nbf: "비전"시간, JWT의 처리를 받아들일 수 없는 시간을 확인하는 데 사용
  • iat: Unix 시간 중 영패가 보내는 시간
  • jti: JWT ID 선언은 JWT
  • 에 고유 식별자를 제공합니다.
    서명
    서명
    JSON Web Signatre 사양에 따라 최종 서명 토큰을 생성합니다.JWT 헤더, 인코딩된 성명을 통합하고 암호화 알고리즘을 적용합니다(예를 들어 HMAC SHA-256).서명된 키는 서버에서 가지고 있기 때문에 기존 영패를 검증할 수 있습니다.

    JWT의 유행 라이브러리

  • 자바 atlassian-jwtjsontoken
  • Pythonpyjwt
  • 노드.jsnode-jwt-simple
  • 루비ruby-jwt
  • PHPfirebase php-jwtluciferous jwt
  • .순액jwt
  • 하스켈haskell-jwt
  • 영패에 기초한 방법의 장점
  • JWT 방법을 사용하면 모든 서버나 도메인에 대해 AJAX를 호출할 수 있습니다.사용자 정보를 전송하는 데 HTTP 헤더가 사용되기 때문입니다.
  • 서버에 별도의 세션 스토리지가 필요하지 않습니다.JWT 자체가 전체 정보를 전달했다.
  • 서버 측은 하나의 API로 간소화되어 정적 자산(HTML, CSS, JS)은 CDN을 통해 서비스를 제공할 수 있다.
  • 인증 시스템은 이동할 수 있고 영패는 모든 장치에서 생성할 수 있다.
  • 쿠키에 대한 수요가 없어졌기 때문에 크로스 사이트 수요집합을 보호할 필요가 없습니다.
  • API 키는 or 또는 해결 방안을 제공하고, JWT는 많은 입도 제어를 제공하여 어떠한 디버깅 목적으로도 검사할 수 있다.
  • API 키는 중앙 스토리지 및 서비스에 따라 다릅니다.JWT는 자체적으로 발표될 수도 있고, 외부 서비스가 허용하는 범위와 기한이 지난 시간에 발표될 수도 있다.
  • Python에서 JWT 만들기


    유효 하중 인코딩
    >>> import jwt
    >>> encoded = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
        'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg'
    
    디코딩 서버의 유효 부하
    >>> jwt.decode(encoded, 'secret', algorithms=['HS256'])
    {'some': 'payload'}
    
    이 문장이 도움이 되기를 바랍니다.마음대로 당신의 생각을 평론에 써 주십시오.
    이 글은 Apcelent Tech Blog에 처음 등장했다.

    좋은 웹페이지 즐겨찾기