Untitled
unknown
python
3 years ago
5.6 kB
5
Indexable
import jwt import binascii import cryptography from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization def get_rsa_public_key(n, e): """ Retrieve an RSA public key based on a module and exponent as provided by the JWKS format. :param n: :param e: :return: a RSA Public Key in PEM format """ n = int(binascii.hexlify(jwt.utils.base64url_decode(bytes(n, "utf-8"))), 16) e = int(binascii.hexlify(jwt.utils.base64url_decode(bytes(e, "utf-8"))), 16) pub = cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicNumbers(e, n).public_key(default_backend()) return pub.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo, ) url_token 'https://api-datrix-spc.tst.services.h2obanking.eu/auth/realms/sella-ocs/protocol/openid-connect/token' url_key = 'https://api-datrix-spc.tst.services.h2obanking.eu/auth/realms/sella-ocs/protocol/openid-connect/certs' resp_token = {"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJmR2IzaE0ta0czNkNzek5Wc29jUTM4SHJtcWx5a0wwcmdMbGpsaFZhcHQ0In0.eyJleHAiOjE2NjI1NzAxNDgsImlhdCI6MTY2MjU2OTg0OCwianRpIjoiNmZhOThiYTctOGUzNy00YTg3LWFkZDktYzkyMGM3M2JmNDQwIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1vY3MuYXBwcy4wMy5rOHMudHN0OjkwODAvYXV0aC9yZWFsbXMvc2VsbGEtb2NzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImJhNmI0ZmRhLWMxNDctNDgwNy05NDhkLTQ1NGNiMTBmZjZmOCIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9jci1vY3MtY2xpZW50LW1zIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImRlZmF1bHQtcm9sZXMtc2VsbGEtb2NzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJjbGllbnRJZCI6Im9jci1vY3MtY2xpZW50LW1zIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJjbGllbnRIb3N0IjoiMTcyLjE3LjI0OC44NCIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1vY3Itb2NzLWNsaWVudC1tcyIsImNsaWVudEFkZHJlc3MiOiIxNzIuMTcuMjQ4Ljg0In0.D-cpl1QrhRP1OSwM0zbRRO7-Yp-nZzwi6fqJsSAO5Rxt-mkwO5hoICd_VGD0Kt_pVfujJ5S04bn2AcEtJmjwG3Zhf33ZftbNQjoRFi-6_DX5CwcYx3N5CCAIJ89xmVb0G48SYFrT0yj0U2o0C_WZwyvuM3U0My7f1R8oUodd8qbUG-2JpJGNxMGHAqCjFzRALqceYw6SUCueIeYRyjn0L1ZcC4oR61PrdjTCh02hxXR9PrKfowbHpAdZltRsXRrsNn0bqT5b4O6O3GkVVeP9_AxTb3Ae4IoWiVYigF7kMSfOSquaCi-rM7FVbRgR_j-CvjvrKuP9abLbJTBvv7wQLg","expires_in":300,"refresh_expires_in":0,"token_type":"Bearer","not-before-policy":0,"scope":"email profile"} resp_key = {"keys":[{"kid":"vAcRdKYW8Q38ewSDiKlTAnn82-RtkGuTfegr5BVTgZM","kty":"RSA","alg":"RSA-OAEP","use":"enc","n":"jlhpQDLhk_OeSZB1MQER_PKhfz2ge_9EwlA00ognEK1gR80fsNM_HFTaZ0qU91gXS6ijHm7mnimgiboSOon_BofU55kH3A8VxmwIimWcE5a__QTcbgjwhl6XPqrDlg7yoyLrTCv86NCqa3vQ-fiBzCE8aSDtFotKqzfI22TCZjb0xK-IOUoV_9hLxUCzu0hnyjSGcefGyP8dRYVyTV_PLwbP-6m_C3GDcU6vMK1GKzETrGouH7VOhAUvDSCPRmaaAIc9CWd1F39ULH6zfiqdgQwEy0xoTsHKNJyDXMQf1-bbSpk0oq_3kETEFvqr6fwObFW1DGJkZI1fnIcBQWVVQQ","e":"AQAB","x5c":["MIICoTCCAYkCBgGA8sQBrjANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlzZWxsYS1vY3MwHhcNMjIwNTIzMjExMTEzWhcNMzIwNTIzMjExMjUzWjAUMRIwEAYDVQQDDAlzZWxsYS1vY3MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCOWGlAMuGT855JkHUxARH88qF/PaB7/0TCUDTSiCcQrWBHzR+w0z8cVNpnSpT3WBdLqKMebuaeKaCJuhI6if8Gh9TnmQfcDxXGbAiKZZwTlr/9BNxuCPCGXpc+qsOWDvKjIutMK/zo0Kpre9D5+IHMITxpIO0Wi0qrN8jbZMJmNvTEr4g5ShX/2EvFQLO7SGfKNIZx58bI/x1FhXJNX88vBs/7qb8LcYNxTq8wrUYrMROsai4ftU6EBS8NII9GZpoAhz0JZ3UXf1QsfrN+Kp2BDATLTGhOwco0nINcxB/X5ttKmTSir/eQRMQW+qvp/A5sVbUMYmRkjV+chwFBZVVBAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFV1KhbUHAaq2gPzVmiOUI3+GVKAesAb8f4TRZ0RbRfR6Gl0guRasavD923zO5UnwCJnezTB+GIRz9t/3FZxrVeNSxTsoLGrxS1pWzgr4Nh02MaZ2KwQHcNkmN7X3ymvdC7EmZ6u/Ge4QjIr6NbEFv8fNsucWBxDeauxKk6JHtABHrzhUiKxwrILKPRIRfs8I06A0VlV98py4QsO8hDdJMykOTvlPn+lQlrvQUbBfjGzydJohFhS8g4jn1BsFxr9Dur/Hx7lxt635c8x2VmIeE8axUP9LYFHBpCrzDfGAx6YoiEkLopTDBv7vhB83tOF95bTzw0GFPSu5H7bXYICJD0="],"x5t":"EM0ks2HIoe_cSdkpKHoB-x6aSQ0","x5t#S256":"KI0qAac9i5IdfhWxXm4qTgWS7KgYCIaZDV3WJvtqQqE"},{"kid":"fGb3hM-kG36CszNVsocQ38HrmqlykL0rgLljlhVapt4","kty":"RSA","alg":"RS256","use":"sig","n":"2EY3N5zOSx2xId_YKfrTyWvhU7M2q5bm9r5OHm3TL_ftvy5m5lj3o-luaDAAZVXwEOjx0hy1HdH8MJB0U-11W9c1mKqhi_Anyezfl_DUIXSipJVQQcKQYafiQUc8ABLaHx68_g3l0LePd_RdDIvdCkMJ4t90YXvfwNdmQEaT_sB2M0rwk0XZiZ4fWR7eghYt1AQ9gxkvgG7PvfsYmkx2X76jnu64CYq6NzOvd2BDgGe6gcS8S22aCiXpX21jBmhevc60lC8feuJ-H4SF7WnAEPBNJjjODEv1oPswyumpePJ2f4hv7L2iaYYcNRscCvmAdkQTdqQGAeVzSAl2plsbRw","e":"AQAB","x5c":["MIICoTCCAYkCBgGA8sQBPDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlzZWxsYS1vY3MwHhcNMjIwNTIzMjExMTEzWhcNMzIwNTIzMjExMjUzWjAUMRIwEAYDVQQDDAlzZWxsYS1vY3MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYRjc3nM5LHbEh39gp+tPJa+FTszarlub2vk4ebdMv9+2/LmbmWPej6W5oMABlVfAQ6PHSHLUd0fwwkHRT7XVb1zWYqqGL8CfJ7N+X8NQhdKKklVBBwpBhp+JBRzwAEtofHrz+DeXQt4939F0Mi90KQwni33Rhe9/A12ZARpP+wHYzSvCTRdmJnh9ZHt6CFi3UBD2DGS+Abs+9+xiaTHZfvqOe7rgJiro3M693YEOAZ7qBxLxLbZoKJelfbWMGaF69zrSULx964n4fhIXtacAQ8E0mOM4MS/Wg+zDK6al48nZ/iG/svaJphhw1GxwK+YB2RBN2pAYB5XNICXamWxtHAgMBAAEwDQYJKoZIhvcNAQELBQADggEBALNLTkzFA068BH+psPv+W3Jam6X7Z+rnDp0XpA2RbawtTLrJW2Fij/7Q1VD1ry8Pt5kqDPSNDpxbxZoBq8zRLbzBm8J0gIDAXPtGYW6nRqLXXAu8o5XKtFoJhW8eHy6oD3QeV+lAszrokFQchK6RvRvqa7QPNz8KKvzFh1EfSJC3HHXbwDO4WzsIh2cdq6lH2i6UsNUaz33iYWJorzC/UO5kytbmeGRwlmPBpOR4POGwTkO/GutHk19ySv2lfgdqP/ZsTX2MaFF/mvDuImrvdY3oKX1OSOUwzX3ArhM21IVEkpA/E87UWvCDeKIozIuecQD+gOV8ePJPxeRxI7BRyEY="],"x5t":"qbFBBMNtuIYkthCbC8fv_kJ4dLU","x5t#S256":"fa-dy18LiS2OtE6anBuXVBpgl96s3dhQ-ExpyZqQc-0"}]} n, e = resp_key['keys'][1]['n'], resp_key['keys'][1]['e'] token = resp_token['access_token'] public_key = get_rsa_public_key(n, e).decode() jwt.decode(token, public_key, algorithms=["RS256"], audience='account')
Editor is loading...