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()