requirements.txt:
cryptography
requests
Authentication.py:
import json
import requests
import time
from base64 import b64encode
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding, utils
from cryptography.hazmat.backends import default_backend
class Authenticate:
def __init__(self, request_body: dict, private_key: str):
self.url = 'https://api.transip.nl/v6/auth'
self.request_body = request_body
self.private_key = private_key
def sign(self) -> str:
key_object = serialization.load_pem_private_key(
self.private_key.encode('utf-8'),
password=None,
backend=default_backend()
)
signature = key_object.sign(
json.dumps(self.request_body).encode('utf-8'),
padding.PKCS1v15(),
hashes.SHA512()
)
return b64encode(signature).decode('utf-8')
def authenticate(self) -> str:
headers = {'Signature': self.sign()}
response = requests.post(self.url, json=self.request_body, headers=headers)
return response.text
if __name__ == '__main__':
""" RESULT: {"token":"...."} """
request_body = {
"login": "test-user",
"nonce": str(time.time()),
"read_only": False,
"expiration_time": "30 minutes",
"label": "add description",
"global_key": True
}
private_key = """
-----BEGIN PRIVATE KEY-----
your-key==
-----END PRIVATE KEY-----"""
authorize = Authenticate(request_body, private_key)
result = authorize.authenticate()
print(result)