Code examples
Python Code Example
Below is a Python code example of making a client_credentials
grant for a client with a private key authentication method.
import jwt, jwcrypto.jwk as jwk, datetime, requests
from datetime import datetime, timedelta, timezone
import time
import random
import string
letters = string.ascii_lowercase
client_id = "client_id here"
private_key = {
}
key = jwk.JWK(**private_key)
def generate_jti():
return "".join(random.choice(letters) for i in range(32))
def generate_jwt(client_id, identity_server):
iat = datetime.now()
exp = datetime.now() + timedelta(hours=1)
payload = {
"iss": client_id,
"sub": client_id,
"aud": "{}/oidc/token".format(identity_server),
"iat": time.mktime(iat.timetuple()),
"exp": time.mktime(exp.timetuple()),
"jti": generate_jti()
}
return jwt.encode(
payload,
key.export_to_pem(private_key=True, password=None),
algorithm="RS256",
)
def get_client_credentials_token(client_id, private_key, scope, identity_server = "https://identity.moneyhub.co.uk"):
assertion = generate_jwt(client_id=client_id, identity_server=identity_server)
params = {
"scope": scope,
"grant_type": "client_credentials",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion": assertion,
}
headers = {
"Content-Type": "application/x-www-form-urlencoded",
}
return requests.post("{}/oidc/token".format(identity_server), data=params, headers=headers)
r = get_client_credentials_token(client_id=client_id, private_key=private_key, scope="payee:create")
print(r.text)
Updated 12 months ago