github.com/crowdsecurity/crowdsec@v1.6.1/test/bin/decode-jwt (about)

     1  #!/usr/bin/env python3
     2  
     3  import base64
     4  import json
     5  import sys
     6  
     7  
     8  def decode_base64url(data):
     9      # Not the same as "bin/base64 -d":
    10      # + -> -
    11      # / -> _
    12      # = -> ''
    13      pad = len(data) % 4
    14      if pad > 0:
    15          data += '=' * (4 - pad)
    16      return base64.urlsafe_b64decode(data)
    17  
    18  
    19  def decode_jwt(token):
    20      token = token.rstrip('\n')
    21      header, payload, signature = token.split('.')
    22      decoded_header = json.loads(decode_base64url(header))
    23      decoded_payload = json.loads(decode_base64url(payload))
    24      # the signature is binary, so we don't decode it
    25  
    26      return decoded_header, decoded_payload, signature
    27  
    28  
    29  def main():
    30      header, payload, signature = decode_jwt(sys.stdin.read())
    31      out = {
    32          'header': header,
    33          'payload': payload,
    34          'signature': signature,
    35      }
    36      print(json.dumps(out, indent=4))
    37  
    38  
    39  if __name__ == '__main__':
    40      main()