Skip to content

Instantly share code, notes, and snippets.

@n2o
Last active August 31, 2021 13:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save n2o/77a0683207e1d443ab17bc282d1916bd to your computer and use it in GitHub Desktop.
Save n2o/77a0683207e1d443ab17bc282d1916bd to your computer and use it in GitHub Desktop.
Erzeuge ein Schlüsselpaar, erstelle einen JWT, signiere ihn und decodiere ihn wieder
# Vorher: pip install jwt[crypto]
import jwt
# Hier ein Beispiel mit einem Testtoken, er wurde mit folgenden Befehlen erstellt:
#
# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key
# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub
testing_private_key = """
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
"""
testing_public_key = """
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4eCM/zsm76es6olZM0vq
tZ6B3FroMCHqkDDGiEJx5o9EGkjxQMYDsifD2Wa/g9qSi52VMfj+gG/OC5BryCY4
MHrY+o3FU4rnw4yRnuTWeP/uy9TI6r0LQm3yc4nbZasZ8tE4Nl3URYm0s4ge9zmT
LqAy2CsjcnphS8geqaLPewwIcRIL9n61MvQ53iJX8gWBweN3BlaS0xqdGuOtLbb8
Hg2LZI0lTYqD1bgJczUvgbPWFu/srUEQ5s6FW/iGBqM7OP0nemID5SNnSzhX+JMo
hOksXujixSXwWskM3ri1gP2dncIwHkNm8tqsD4OeuG6VSHStDXo0Ix8o4SNvE/Xg
pu8/oHwSGhAYMjA/sUM0dvPT5o3maeZ1ID6AlY2lHpgJ4+R0LQ6+17FokmWZiaXa
OGBSZu6xQ0SHV7mIFg4LXQdcys4T2ww6Ixn2D2JQW7yYvEwhVwyFrHedTbIs+Fsa
9H43p/kQK5mtWKT/dO/cviMToDL+nX9df7buv7gIvZ9zRP4hmzGG3gt3VBCFWucD
b73Oy67UqbH8Eafe7HW2RTw00AhnH6WYgQhNlhCR4HPkDgO6LQvBIDCz1a25HRtb
Aba/vk5ZklXgsGU0kaGr6KyYwjBUZnpX4Ai/lgeR9pFQV0m436VqpLlACh3jkArK
3OzMDb64k8KDPW9m4Ygxy5kCAwEAAQ==
-----END PUBLIC KEY-----
"""
testing_token = jwt.encode({"some": "payload"}, testing_private_key, algorithm="RS256")
print(f"Erzeugter JWT: {testing_token}")
# Erzeugter JWT: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.tTsMeRzPet_7KaZ-sZ6sE6rNvCbZROCCkgUChOHhCcrrDf1LM9szniCz4_WY_lCpwfoa6JOwIedZveyZiYG1Z0yMLeMZh8zKSwUUnRZxL0_NVE_uaPUVH5famkeV4tGRpAQJ5jpwRZ-JCxRyO_YybrYMDTZ8fB8kYvhvGNKy6oT3GiiJfMDu2Qg8rvB_UaU1eIl7AyQKPtzKdoINpt59zVfPFoN_QBag4HoGOxVQcEGzVKNPl1zjciWGTARF6ggE57pZXJaavlrS7CdOxnrVNxr-EoMjLpLbw1RoKUoMMyIcvkoD1qhIJlkX4-31fgShKXl-KnY9P_9eSGturzau3DwedZe-okRAsxQuDFwrPmesOiYy7dY8VnGxvAaQDg_8JA83dfb1_lKV4NuJuXHevKFdLA8Gu-hmIvv6lzj3SK7G-N2PvyrXLQzg25xdqeMYet1qE3KFN8aU8gI0EClq-mX65efP-On9Y-iO6ByR691DtwiIP9308uoGqzWfJrA1JS0f3kMt_3pQcK1vmBz5OMYad5SIf5xUR3EIoxmni8zbSpuUT0npw0XWIFUM3BBPv0Z-LaYs0zIlA9BGNbbO1VrBkfifIW4oYsgIVeWm6WJFWyQRkp2Oi6hpzOmWB60V3SzNFBwIz0tI7Mjtqsl9hcTzcZMDRP9a_hy9he8_hpE
payload = jwt.decode(testing_token, testing_public_key, algorithms=["RS256"])
print(f"Value: {payload}")
# Value: {'some': 'payload'}
# Visualisiere JWT: https://jwt.io/#debugger-io?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.tTsMeRzPet_7KaZ-sZ6sE6rNvCbZROCCkgUChOHhCcrrDf1LM9szniCz4_WY_lCpwfoa6JOwIedZveyZiYG1Z0yMLeMZh8zKSwUUnRZxL0_NVE_uaPUVH5famkeV4tGRpAQJ5jpwRZ-JCxRyO_YybrYMDTZ8fB8kYvhvGNKy6oT3GiiJfMDu2Qg8rvB_UaU1eIl7AyQKPtzKdoINpt59zVfPFoN_QBag4HoGOxVQcEGzVKNPl1zjciWGTARF6ggE57pZXJaavlrS7CdOxnrVNxr-EoMjLpLbw1RoKUoMMyIcvkoD1qhIJlkX4-31fgShKXl-KnY9P_9eSGturzau3DwedZe-okRAsxQuDFwrPmesOiYy7dY8VnGxvAaQDg_8JA83dfb1_lKV4NuJuXHevKFdLA8Gu-hmIvv6lzj3SK7G-N2PvyrXLQzg25xdqeMYet1qE3KFN8aU8gI0EClq-mX65efP-On9Y-iO6ByR691DtwiIP9308uoGqzWfJrA1JS0f3kMt_3pQcK1vmBz5OMYad5SIf5xUR3EIoxmni8zbSpuUT0npw0XWIFUM3BBPv0Z-LaYs0zIlA9BGNbbO1VrBkfifIW4oYsgIVeWm6WJFWyQRkp2Oi6hpzOmWB60V3SzNFBwIz0tI7Mjtqsl9hcTzcZMDRP9a_hy9he8_hpE&publicKey=-----BEGIN%20PUBLIC%20KEY-----%0AMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4eCM%2Fzsm76es6olZM0vq%0AtZ6B3FroMCHqkDDGiEJx5o9EGkjxQMYDsifD2Wa%2Fg9qSi52VMfj%2BgG%2FOC5BryCY4%0AMHrY%2Bo3FU4rnw4yRnuTWeP%2Fuy9TI6r0LQm3yc4nbZasZ8tE4Nl3URYm0s4ge9zmT%0ALqAy2CsjcnphS8geqaLPewwIcRIL9n61MvQ53iJX8gWBweN3BlaS0xqdGuOtLbb8%0AHg2LZI0lTYqD1bgJczUvgbPWFu%2FsrUEQ5s6FW%2FiGBqM7OP0nemID5SNnSzhX%2BJMo%0AhOksXujixSXwWskM3ri1gP2dncIwHkNm8tqsD4OeuG6VSHStDXo0Ix8o4SNvE%2FXg%0Apu8%2FoHwSGhAYMjA%2FsUM0dvPT5o3maeZ1ID6AlY2lHpgJ4%2BR0LQ6%2B17FokmWZiaXa%0AOGBSZu6xQ0SHV7mIFg4LXQdcys4T2ww6Ixn2D2JQW7yYvEwhVwyFrHedTbIs%2BFsa%0A9H43p%2FkQK5mtWKT%2FdO%2FcviMToDL%2BnX9df7buv7gIvZ9zRP4hmzGG3gt3VBCFWucD%0Ab73Oy67UqbH8Eafe7HW2RTw00AhnH6WYgQhNlhCR4HPkDgO6LQvBIDCz1a25HRtb%0AAba%2Fvk5ZklXgsGU0kaGr6KyYwjBUZnpX4Ai%2FlgeR9pFQV0m436VqpLlACh3jkArK%0A3OzMDb64k8KDPW9m4Ygxy5kCAwEAAQ%3D%3D%0A-----END%20PUBLIC%20KEY-----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment