Skip to content

Client Assertion

A client assertion is a short-lived, signed JWT that your application presents to the Authorization Server to prove its identity. It takes the place of a static client secret, providing a stronger and more auditable form of client authentication.

In UAE Open Finance, a client assertion is required on two endpoints:

EndpointUse
/tokenExchanging an authorisation code for tokens, refreshing an access token, or obtaining a client credentials token
/parSubmitting a Pushed Authorization Request to initiate a consent journey

Because each assertion is signed with your application's private key, the Authorization Server can verify it using your public key from the Trust Framework — without any shared secret ever leaving your system.

One assertion per request

A client assertion must be freshly generated for every request. The jti claim (a unique UUID) ensures the Authorization Server can detect and reject replayed assertions.

Strict claim rules

For a complete per-claim reference — including the exact aud value, jti uniqueness requirements, exp/iat lifetime window, and a side-by-side comparison with the Request Object — see JWT Claim Rules.

Structure

The client assertion is a signed JWT composed of a header and a set of claims:

FieldValueDescription
algPS256The only algorithm supported by the UAE Open Finance FAPI profile
kidstringKey ID of your signing certificate, as registered in the Trust Framework

Claims

ClaimDescriptionExample
audThe Authorization Server's issuer URI — obtained from the .well-known discovery endpointhttps://auth.[LFICode].apihub.openfinance.ae
issYour application's client_id from the Trust Frameworka1b2c3d4-...
subSame as iss — your client_ida1b2c3d4-...
iatUnix timestamp of when the JWT was issued1713196123
expUnix timestamp when the JWT expires. Keep this short — 5 minutes is standard1713196423
jtiA unique identifier (UUID) for this assertion. Prevents replay attacksf47ac10b-58cc-...

Keep assertions short-lived

Set exp to no more than 5 minutes after iat. Long-lived assertions increase the window of exposure if intercepted.

Testing client assertions on the sandbox

The sandbox provides O3 Utility endpoints that accept your private key and return a ready-made client assertion JWT — useful for confirming your key setup is correct before writing your own signing code. See O3 Sandbox Utilities.

Signing the assertion

Once the header and claims are assembled, sign the JWT as a JWS using the PS256 algorithm and your private signing key.

See Message Signing (JWS) for the signing helper and full code examples in TypeScript and Python.