Banking Testing Tool User Guide

Banking Testing Tool User Guide

1. Purpose

This tool ensures reliable and efficient testing for conformance to the Ozone Connect implementation within the API Hub. It simplifies testing, enforces standards, and enhances quality and interoperability.

This guide provides step-by-step instructions to set up and use the test automation framework, including initializing configurations, running tests, and validating setups. It supports testing on OzoneAPI's mock server or custom servers with ease.

2. Scope

This manual covers the essential aspects of the Testing Tool, including its installation, usage, and testing capabilities. It provides detailed instructions and guidelines to help users effectively utilise the tool within their development and testing environments. The scope includes:

Installation and setup

Provides instructions for installing and setting up the Testing Tool using Docker, including prerequisites and initial configuration. This tool has been successfully tested on Ubuntu Linux and on MacOS.

Usage instructions

Details the commands and options available in the Testing Tool CLI tool, with examples for effective usage.

Testing

Explains the testing procedures and conformance checks, including how to run tests and interpret the results.3. Audience

3. Audience

The primary audience for this manual includes developers, QA engineers, and technical implementers who are involved in the integration and testing of the Ozone Connect implementation for the API Hub.

QA engineers

Professionals responsible for ensuring the quality and reliability of the Ozone Connect implementation by conducting thorough testing and identifying defects.

Integration Specialists

Experts focused on integrating and aligning the Ozone Connect implementation with the API Hub to ensure seamless interoperability and conformance.

 

This manual assumes that the audience has a basic understanding of CLI tools, Docker, CBUAE Open Finance Standards and Ozone Connect specifications.

4. Overview

The Testing Tool is a command-line interface (CLI) based testing tool designed to assist implementers in verifying their conformance to the Ozone Connect implementation. Developed specifically for the API Hub, the Testing Tool provides a comprehensive suite of tests that validate various aspects of the implementation against the predefined standard. The tool runs within a Docker container, ensuring a consistent and isolated testing environment. By using the Testing Tool, implementers can efficiently identify and rectify issues, ensuring that their implementations meet the required conformance criteria.

5. Setup Requirements

Before You Start:

  • Familiarise yourself with the Ozone Connect specifications.

  • Ensure you have https://www.docker.com/ installed locally on your machine to run Docker containers.

6. Usage

The instructions below are based on using the Testing Tool to test against the latest Ozone Connect Specification.


6.1 Running the Testing Tool

To test the LFI’s implementation of Ozone Connect, execute the following commands. These commands allow you to add a custom configuration file and SSL certificates to connect the tool to the LFI’s server.

The basic command for this testing tool is shown below. Running it without any options will display a list of available options.

6.1.1 Constructing the command for the test tool

6.1.1.1 Base Command:

docker run --user root --rm -it \ -v "$(pwd)/config:/usr/o3/tr-ozone-connect/config" \ -v "$(pwd)/logs:/usr/o3/tr-ozone-connect/logs" \ public.ecr.aws/g5c5c6i0/tr-image/tr-ozone-connect:2026.01.0

6.1.1.2 Help Command

To view the available Options, run:

docker run --user root --rm -it \ -v "$(pwd)/config:/usr/o3/tr-ozone-connect/config" \ -v "$(pwd)/logs:/usr/o3/tr-ozone-connect/logs" \ public.ecr.aws/g5c5c6i0/tr-image/tr-ozone-connect:2026.01.0 help

6.1.1.3 Available Options:

  • yarn : Run the framework with Yarn and specified arguments.

  • help: Show the help message.

The Base Command and the Help Command display the same output.


6.1.2 Upgrading from a previous version of this testing tool

6.1.2.1 Using JWT Authorization

Release 2025.3.1 introduces JWT authorization support for Ozone-connect APIs, requiring configuration changes in certs section in the config.yaml.

Previous certs section
certs: transport: ca: certificate.pem certFileName: cert_fullpath.pem keyFileName: key_fullpath.key

The updated configuration introduces JWT authorization settings and reorganizes existing certificate configurations. Set authorization_type to JWT to enable JWT authorization or none to disable it (Authorization header will not be included in API requests). The signing certificate, private key, and key identifier (kid) are required components in the new certs section. ReferJWT Authorization document to know more about JWT authorization.

Updated certs section

certs section is removed from server. New section look like below in config file

certs: # Each top-level key (TPP, APIHUB, LFI) represents a different actor in the ecosystem. #################################################################################################################################### # TPP: Configuration for the Third-Party Provider. # This is the entity (e.g., a fintech app) that accesses financial data on behalf of a user. # The config is required to simulate the TPP performing payload signing & encryption. #################################################################################################################################### tpp: clientId: '' # 'application': The OFTF Application representing the TPP in the Ozone Testing Tool. application: # 'name': The application name from the OFTF. name: Ozone-Testing-Tool-TPP-App # 'id': The application ID from the OFTF. id: 12345678-1234-1234-1234-123456789012 # 'sig1': Configuration for the TPP's primary SIGNING certificate. # This key pair is used to sign requests, assertions, and JSON Web Tokens (JWTs). # Mandatory section sig1: # 'pemFileName': The path to the public certificate file. pemFileName: /usr/o3/tr-ozone-connect/config/certs/tpp/sig1/sig1.pem # 'keyFileName': The path to the corresponding private key file. keyFileName: /usr/o3/tr-ozone-connect/config/certs/tpp/sig1/sig1.key # 'kid': The Key ID used in JWS headers to identify this signing key. kid: AAAA # 'jwks_url': The URL where the JSON Web Key Set (JWKS) can be retrieved. jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/${TPP.application.id}/application.jwks #################################################################################################################################### # APIHUB: Configuration for the API Hub / Central Registry. # The config is required to simulate the API Hub performing JWT Auth payload signing. #################################################################################################################################### apihub: # 'application': The OFTF Application representing the APIHub in the Ozone Testing Tool. application: # 'name': The application name from the OFTF. name: Ozone-Testing-Tool-APIHub-App # 'id': The application ID from the OFTF. id: 12345678-1234-1234-1234-123456789012 # 'sig3': Configuration for the APIHub's SIGNING certificate. # Mandatory section if authorization_type: JWT or CCG sig3: pemFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/sig3/sig3.pem keyFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/sig3/sig3.key kid: AAAA jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/${APIHUB.application.id}/application.jwks # 'c4': Configuration for the APIHub's TRANSPORT certificate (for mTLS). # Mandatory section if certs are require to authenticate api calls c4: # curl https://crl.sandbox.pki.openfinance.ae/issuer-ca.pem https://crl.sandbox.pki.openfinance.ae/root-ca.pem > ca.pem ca: /usr/o3/tr-ozone-connect/config/certs/apihub/c4/ca.pem certFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/c4/c4.pem keyFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/c4/c4.key # kid: BBBB #################################################################################################################################### # LFI: Configuration for the Licensed Financial Institution (e.g., a bank). # This config is required to simulate the LFI performing payload decryption. #################################################################################################################################### lfi: # 'organisation': The OFTF Organisation representing the LFI in the Ozone Testing Tool. organisation: # 'name': The organisation name from the OFTF. name: "LFI LEGAL NAME" # 'id': The organisation ID from the OFTF. id: 12345678-1234-1234-1234-123456789012 # 'enc1': Configuration for the LFI's ENCRYPTION certificate. enc1: aud: "AUD" pemFileName: '/usr/o3/tr-ozone-connect/config/certs/lfi/enc1/enc1.pem' keyFileName: '/usr/o3/tr-ozone-connect/config/certs/lfi/enc1/enc1.key' kid: AAAA jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/application.jwks
Migration Notes
  • Transport certificate configurations must be moved from certs.transport to server.certs.transport

  • JWT signing certificate configuration is only required when using JWT authorization. Let it remain as it is if JWT authorization is not being used.

 

Folder structure of config will look like below

config/ ├── certs/ │ ├── apihub/ │ │ ├── c4/ │ │ │ ├── ca.pem │ │ │ ├── c4.key │ │ │ └── c4.pem │ │ └── sig3/ │ │ ├── sig3.key │ │ └── sig3.pem │ ├── lfi/ │ │ └── enc1/ │ │ ├── enc1.key │ │ └── enc1.pem │ └── tpp/ │ └── sig1/ │ ├── sig1.key │ └── sig1.pem └── config.yaml
6.1.2.2 Using Client Credentials Grant Authorization

Release 2025.6.1 introduces CCG (Client Credential Grant) authorization support for Ozone-connect APIs, requiring configuration changes in the config.yaml.
New section is added in config.yaml file.

authorization_type: CCG ccgDetails: authorisationServerTokenUrl: https://mock.rt-cbuae.rt.dev.apihub.openfinance.uk/token ccgClientAssertionType: clientCredentials clientId: 6ag503edb-d2332-5dfdf-99aa-345325f34234 clientSecret: JHbv24jhb2jjI3G45U3I2GlNbfew3weFSSAfdsfdsg

authorization_type should be CCG if 'Client Credential Grant' needs to be use.

The ccgClientAssertionType value can be among private_key_jwt or clientCredentials .

While using private_key_jwt the details of JWT as mentioned in the above server section can be utilized.

6.1.2.3 Using Proxy server

Proxy config can be added in server section by mentioning useProxy: as true

proxy: useProxy: true host: '' # hostname e.g localhost port: # port no in integer e.g 8080 auth: username: '' password: '' protocol: '' # protocol e.g http or https
6.1.2.4 Adding Multiple Users

Since the version 2025.6.1 we also provide the facility to have multiple users to hit the APIs.

6.1.2.5 Adding PII data

In the users section in the config.yaml file, add the details of a user. Then use the name of the user in the dynamic fields accountTypes or paymentTypes. The details of the user information can be found in the chart Banking Testing Tool User Guide

Since the version 2025.23.0 we included default and custom PII data in config file.
LFI can now define there own PII data in config as below

clientId: '' jwksUrl: https://keystore.sandbox.directory.openfinance.ae/73423662-b345-453e-a54b-2f9115a6a45d/50651700-b758-4789-bd66-88bfd07d993e/application.jwks default_pii_data: Initiation: Creditor: - CreditorAgent: SchemeName: IBAN Identification: '10000109010101' Name: Mario International Creditor: Name: Mario International CreditorAccount: SchemeName: AccountNumber Identification: '10000109010101' Name: en: Mario International Risk: DebtorIndicators: UserName: en: xx CreditorIndicators: AccountType: Retail IsCreditorConfirmed: true IsCreditorPrePopulated: true TradingName: xxx

 

To Use above feature four fields are needed

  1. clientId

  2. certs.lfi.organisation.enc1.pemFileName tool will take this value by default or in its absence ‘jwksUrl’ (Should be valid url with secure access which is defined in certs.lfi.organisation.enc1.jwks_url)

  3. jwksUrl (Should be valid url with secure access)

  4. kid (Which is in server.certs.signing)

  5. default_pii_data (Complete PII data)

Custom PII data can be pass as below
It can be passed in specific accountTotest or PaymentToTest

paymentTypes: simple-cbuae-payment: paymentType: cbuae-payment ConsentId: 1a6d828f-ee97-467f-8626-b5db31f5b887 Amount: 100 currency: AED PersonalIdentifiableInformation: Initiation: Creditor: - CreditorAgent: SchemeName: IBAN Identification: '10000109010101' Name: Mario International Creditor: Name: Mario International CreditorAccount: SchemeName: AccountNumber Identification: '10000109010101' Name: en: Mario International

 

Not all fields are required. Any field declared in custom PII will replace or add field in default PII data. Any key needs to be deleted simply give value as “None”
e.g,

PersonalIdentifiableInformation: Initiation: Creditor: - CreditorAgent: SchemeName: "None"

6.1.2.6 Schema version customisation

Now Schema version can be defined in config file against which user can validate there responses as per version defined in https://openfinanceuae.atlassian.net/wiki/spaces. Currently v6 and v7 are supported for data sharing and service initiation apis.
in config file at root level user can define dataSharingServiceInitiationVersion: version . Please see the attache sample config file for e.g.
Banking Testing Tool User Guide

 

dataSharingServiceInitiationVersion: v7 bankProductDataVersion: v7 bankOpenDataSharingVersion: v7 userOperationVersion: v8

6.1.3 Updating Configuration

6.1.3.1 Editing config.yaml

To run tests on your own server, update the config.yaml file located in the newly created config folder on the host machine. Open the file and edit the necessary fields.

6.1.4 Running the Testing Tool with custom configuration

The command to run the testing tool against the customer server is similar to the command in section 61. above, with the addition of updating the configuration file for the testing tool.
The only difference being the addition of line 3 which is the argument to mount the custom config folder.

Sample command WITH the client configuration being provided.

docker run --user root --rm -it \ -v "$(pwd)/config:/usr/o3/tr-ozone-connect/config" \ -v "$(pwd)/logs:/usr/o3/tr-ozone-connect/logs" \ public.ecr.aws/g5c5c6i0/tr-image/tr-ozone-connect:2026.01.0 \ yarn tr-ozone-connect \ --formatter terse \ --loglevel-runner info \ --config ./config/config.yaml \ --out ./test_logs.json \ -s 'Id:[GET /accounts]' -r Id:'[AIS_A001]'


6.1.5 Components of the command

The command provided above docker run --user root --rm -it can has the following 3 parts.

  1. Running the Docker Container: The first part runs the Testing Tool Docker container, mounting the necessary directories and setting up the environment:

Option

Description

Option

Description

-v "$(pwd)/config:/usr/o3/tr-ozone-connect/config"

If the LFI configuration is not provided, the tool will attempt to connect to a the Ozone Connect mock server deployed by Ozone in the cloud. For detailed information on the configuration file format, please refer to the configuration file section: 7.1.2

SSL certificates are necessary for secure mTLS connection between the Testing Tool and LFI’s implementation of Ozone Connect. The method to generate these certificates is documented in the Certificates Generation section: 7.2

After generating the certificates, copy them into a folder named config/certs on the host machine from where the test command will be executed. These copied files are then passed to the Docker container using the configuration options mentioned earlier.

-v "$(pwd)/logs:/usr/o3/tr-ozone-connect/logs"

This option is mandatory and must be provided to access the logs after the program runs. Both the logs and the HTML output report will be available in this folder once the tests are complete.

  1. Acquiring the latest docker image:

Option

Description

Option

Description

public.ecr.aws/g5c5c6i0/tr-image/tr-ozone-connect:2026.01.0 \

This is the location of the publicly available Test Tool Docker image.

  1. Executing the Ozone Testing Tool: This 3rd part executes the Ozone Testing Tool within the container with a set of specified options:

    yarn tr-ozone-connect \ --formatter htmlreport \ --loglevel-runner info \ --config /usr/o3/tr-ozone-connect/config/config.yaml \ --out /usr/o3/tr-ozone-connect/logs/test_logs.json \ -s 'Id:[GET /accounts]' -r Id:'[AIS_A001]'


6.1.6 Options to the tr-ozone-connect command

The available command line options for the yarn tr-ozone-connect command are listed in the table below.

Option

Description

Possible Values

Option

Description

Possible Values

-h, --help

Show help (boolean)

 

-c, --config

Input test configuration files in .yaml or .json format
(Format : string, required)

config.yaml, config.json, ./config/config.yaml

-f, --folder

Preconfigured path to the folders with the test files
(Format : string, required)

src/tests, tests, ./src/tests

-o, --out

Output file name
(Format : string, optional)
A log file and an HTML output report are generated with the name specified in this option.

results.json, output.json, ./test_output.json

-e, --formatter

Use a standard formatter for the output
(Format : string, optional)

full, terse, medium, errors

-s, --regex_for_test_suite

Provide the full name of the test suite from the list.
comma separated list if multiple SuiteId needs to be tested. (No leading and trailing whitespace)
To exclude specific test suite just add '!' before test suite.

To run all the suites, use .*

(Format : comma separated string, optional)

The full list of test suites currently available are :

SuiteIds

If this flag is absent then all suites will get execute.

‘Id:[GET /accounts/{accountId}/customer]’,

‘Id:[GET /accounts/{accountId}/customer,GET /accounts/{accountId}]’
‘Id:[!GET /accounts/{accountId}/customer]’ → this will exclude test suite ‘GET /accounts/{accountId}/customer’ and execute remaining others.

-r, --regex_for_test_case

Provide a regular expression for running selected tests.

(Format : string, required)

The list of the test case names can be found in the

Ozone Connect Test Cases

If this flag is absent then all test cases will get execute.

Example regex values are mentioned in this document :
Regular Expression for Ozone Connect Testing Tool

-v, --loglevel-runner

Log level for the test runner (Format : string, optional)

debug, info, silent (In the order of precedence)

-l, --loglevel-suite

Log level for the test suite (Format : string, optional)

debug, info, error (In the order of precedence)

--version

Show version number (boolean)

 

7. Common Config Files Options

In order to run the above docker command against LFI’s implementation of Ozone Connect, the LFI needs to:

  1. Create an input configuration file.

  2. Provide the certificate files if required.

7.1 Configuration File

The configuration file can be created manually or generated using the init-config command. It should be placed in the ./config folder within the same directory where the docker run command will be executed.

7.1.1 Sample config.yaml file

 Config file for reference: Ozone Connect Sample Config

 

7.1.2 Configuration Fields

This section provides a detailed explanation of the configuration file fields used in the Testing Tool for Open Banking APIs.

Configuration

Description

Configuration

Description

baseUrl

  • Description: The base URL for the API endpoints.

  • Type: String

  • Example Value: https://<Some URL>

accounts-schema-file

  • Description: Path to the dereferenced swagger file for the data-sharing apis

  • Type: String

  • Default and only value : der-cbuae-ozone-connect-data-sharing-openapi.json

  • This field is required for validating the response with the schemas.

payments-schema-file

  • Description: Path to the dereferenced swagger file for the service-initiation apis

  • Type: String

  • Default and only value : der-cbuae-ozone-connect-service-initiation-openapi.json

  • This field is required for validating the response with the schemas.

event-action-schema-file

  • Description: Path to the dereferenced swagger file for the consent event action apis

  • Type: String

  • Default and only value : der-cbuae-ozone-connect-consent-events-actions-openapi.json

  • This field is required for validating the response with the schemas.

insurance-schema-file

  • Description: Path to the dereferenced swagger file for the insurance apis

  • Type: String

  • Default and only value : cbuae-ozone-connect-insurance-data-sharing-openapi.json

  • This field is required for validating the response with the schemas.

products-schema-file

  • Description: Path to the dereferenced swagger file for the product apis

  • Type: String

  • Default and only value : der-cbuae-ozone-connect-products-data-openapi.json

  • This field is required for validating the response with the schemas.

bank-open-data-schema-file

  • Description: Path to the dereferenced swagger file for the bank open data apis

  • Type: String

  • Default and only value : der-cbuae-ozone-connect-bank-open-data-openapi.json

  • This field is required for validating the response with the schemas.

authorization_type

  • Description: The type of authorization.

  • Type: String

  • Currently we support only JWT, CCG and none.

  • If CCG is selected, the following 4 fields (ccgDetails) are required to be updated.
    If CCG is selected, and the ccgClientAssertionType is selected as private_key_jwt then, the (server) fields are required to be updated.

    • If JWT is selected, the (server) fields are required to be updated.

clientId

  • Description: ClientId

  • Type: String

jwksUrl

  • Description: Valid jwksUrl (Secure)

  • Type: String

default_pii_data

  • Description: Valid jwksUrl (Secure)

  • Type: Yaml Object

ccgDetails

  • authorisationServerTokenUrl

  • Description: The complete path for the authorization server end point.

  • Type: String

  • Example Value: authUrl/token

ccgDetails

  • ccgClientAssertionType

  • Description: Type of client credential grant

  • Type: String

  • Example Value: clientCredentials, private_key_jwt

ccgDetails

  • clientId

  • Description: Client Id for client credential grant

  • Type: String

ccgDetails

  • clientSecret

  • Description: Client Secret for client credential grant

  • Type: String

certs

tpp: clientId: '' application: name: Ozone-Testing-Tool-TPP-App id: 12345678-1234-1234-1234-123456789012 sig1: pemFileName: /usr/o3/tr-ozone-connect/config/certs/tpp/sig1/sig1.pem keyFileName: /usr/o3/tr-ozone-connect/config/certs/tpp/sig1/sig1.key kid: AAAA jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/${TPP.application.id}/application.jwks

TPP: Configuration for the Third-Party Provider.
This is the entity (e.g., a fintech app) that accesses financial data on behalf of a user.
The config is required to simulate the TPP performing payload signing & encryption.

application.name: The application name from the OFTF.
application.id: The application ID from the OFTF.

'sig1': Configuration for the TPP's primary SIGNING certificate. (Mandatory section)
This key pair is used to sign requests, assertions, and JSON Web Tokens (JWTs).

 

sig1.pemFileName: The path to the public certificate file.
sig1.keyFileName: The path to the corresponding private key file.
sig1.kid: The Key ID used in JWS headers to identify this signing key
sig1.jwks_url: 'jwks_url': The URL where the JSON Web Key Set (JWKS) can be retrieved

certs

apihub: application: name: Ozone-Testing-Tool-APIHub-App id: 12345678-1234-1234-1234-123456789012 sig3: pemFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/sig3/sig3.pem keyFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/sig3/sig3.key kid: AAAA jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/${APIHUB.application.id}/application.jwks c4: ca: /usr/o3/tr-ozone-connect/config/certs/apihub/c4/ca.pem certFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/c4/c4.pem keyFileName: /usr/o3/tr-ozone-connect/config/certs/apihub/c4/c4.key

APIHUB: Configuration for the API Hub / Central Registry.
The config is required to simulate the API Hub performing JWT Auth payload signing.

'application': The OFTF Application representing the APIHub in the Ozone Testing Tool.
'name': The application name from the OFTF.
'id': The application ID from the OFTF.

'sig3': Configuration for the APIHub's SIGNING certificate. (Mandatory section if authorization_type: JWT or CCG)
sig3.pemFileName: The path to the public certificate file.
sig3.keyFileName: The path to the corresponding private key file.
sig3.kid: The Key ID

sig3.jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/${APIHUB.application.id}/application.jwks

'c4': Configuration for the APIHub's TRANSPORT certificate (for mTLS Mandatory section if certs are require to authenticate api calls)
c4.ca: Path to the CA certificate for transport layer security.
c4.certFileName: Path to the transport layer certificate file.
c4.keyFileName: Path to the private key file for the transport layer certificate.

certs

lfi: organisation: name: "LFI LEGAL NAME" id: 12345678-1234-1234-1234-123456789012 enc1: aud: "AUD" pemFileName: '/usr/o3/tr-ozone-connect/config/certs/lfi/enc1/enc1.pem' keyFileName: '/usr/o3/tr-ozone-connect/config/certs/lfi/enc1/enc1.key' kid: AAAA jwks_url: https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/application.jwks

LFI: Configuration for the Licensed Financial Institution (e.g., a bank).
This config is required to simulate the LFI performing payload decryption.
'organisation': The OFTF Organisation representing the LFI in the Ozone Testing Tool.

organisation.name: The organisation name from the OFTF.
organisation.id: The organisation ID from the OFTF.

'enc1': Configuration for the LFI's ENCRYPTION certificate.
enc1.aud: AUD value for PII data encryption.
enc1.pemFileName: The path to the public certificate file. Tool will look for this by default. In its absense it will use jwks_url in enc1
enc1.keyFileName: The path to the corresponding private key file.
enc1.kid:
enc1.jwks_url: (mandatory) https://keystore.sandbox.directory.openfinance.ae/${FLI.organisation.id}/application.jwks

server

  • aud

Identifier for the party receiving the JWT. This must be set to the PROVIDER_ID specified by Ozone during configuration.

server

  • request_object_signing_alg

PS256

server

  • expiry_in_sec

We recommend an expiry time of 10-30s.

When validating the JWT, allow for a 10s clock skew.

server

certs

  • signing

    • kid

The key ID of key-pair used to sign the message as published on the JWKS. The specification does not support the use of other means of identifying the key as they are not considered to be secure enough (e.g. x5c and x5u are not supported).