Client credentials
Used for machine-2-machine
When requesting an access token use grant_type: client_credentials.
HTTP POST is used for the token endpoint.
Example: http://127.0.0.1:8080/oidc/tenant1/token-endpoint
Request parameters
These parameters must be posted as a part of the URL-encoded form values.
Parameter
Description
Mandatory
grant_type
Supported value is client_credentials
.
scope
requested scopes (space-separated)
resource
one or more values, each identifying a target API (audience).
Multiple = multiple params, not space-separated.
Using the client_credentials grantRequest parameters
When using the token endpoint with the client_credentials grant (M2M) a couple of things needs to be in place:
In the discovery_meta section on the OIDC module add client_credentials:
"grant_types_supported": [
"authorization_code",
"refresh_token",
"client_credentials"
],
In the Relying Party configuration add:
"client_credentials_pipe_id": "client_credentials_pipe",
Add corresponding "client_credentials_pipe":
// Example pipe for JWT access token with ttl of 60 minutes
{
"id": "client_credentials_pipe",
"config": {
"valves": [
{
"name": "CreateJwt",
"enabled": true,
"config": {
"dest": "access_token",
"jwt_ttl": 60,
"jwt_headers": {
"test_header": "test_header",
"typ": "at+jwt"
},
"jwt_claims": {
"test_claim": "test_claim",
"sub": "${request.client_id}",
"iss": "https://op.example.com",
"aud": ["https://api.example.com/"],
"scope": "${request.scope}"
},
"keystore": {
"path": "/fortified_test/config/keystore.p12",
"password": "supersecret",
"type": "PKCS12"
},
"keystore_password": "supersecret",
"keystore_alias": "jwt"
}
},
{
"name": "JsonObjectCreate",
"enabled": true,
"config": {
"src": {
"access_token": "${item.access_token}",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read"
},
"dest": "client_credentials"
}
}
]
}
}
// Example pipe for opaque access token with ttl of 60 minutes
{
"id": "client_credentials_pipe",
"config": {
"valves": [
{
"name": "CreateItem",
"enabled": true,
"config": {
"id": "temp",
"properties": {}
}
},
{
"name": "JsonObjectCreate",
"enabled": true,
"config": {
"src": {
"access_token": "",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read"
},
"dest": "client_credentials"
}
}
]
}
}