Specifications
Glossary
-
Attribute - Any piece of information related to a person that can be optionally shared during an OIDC authentication transaction, providing additional user details.
-
Authentigate - A service developed by SK to offer attribute storage, calculation and sharing functionalities, allowing for the secure and controlled exchange of user information during authentication.
-
RP (Relying Party) - An organization or service that utilizes the SK authentication gateway service to authenticate its users and verify their age.
-
OIDC (OpenID Connect) - A protocol used for central authentication, facilitating secure user verification and attribute sharing.
Authentication Flows Supported
The Authentigate service supports two endpoints for initiating authentication:
-
Authorization endpoint (/authorize), using POST or GET request after which the user is redirected to login service at OIDC_SERVICE/login.
-
Pushed Authentication Request, PAR (/par) where Authentigate service validates the POST request and responds with a URI for starting authentication.
Authentication Request Parameters
Regardless of authentication flow, the Authentication Request MUST include all required parameters (per parameter, this may vary depending on the flow used - this is highlighted in the table below).
Including non-required parameters is optional.
Authentigate supports both signed and unsigned Authentication Requests. For passing request parameters as JWT, request parameter must be used (see Signed Authentication Request).
Authentication Request parameters:
| Parameter | Required | Value | Description |
|---|---|---|---|
|
Yes |
Must contain 'openid'. Supported scopes can also be retrieved from /.well-known/openid-configuration [1] |
Static value required by OIDC core protocol and additional user information relying party needs. Values separated by spaces. |
|
No |
Integer |
Specifies against which age should comparison be made |
|
Yes |
Must be 'code' |
The authorization code flow is used |
|
Yes |
Relying-party ID |
A pre-registered relying-party identifier |
|
Yes |
Relying-party callback URL |
A pre-registered relying party callback URL |
|
Yes |
Unique random string |
RP generated opaque value used to maintain state between the request and the callback. Can be used to mitigate replay and CSRF attacks |
|
No |
Unique random string |
RP generated unique string. If provided, will be returned as a nonce claim in the id_token. Can be used to mitigate replay attacks |
|
No |
Must be one of et, en, lv, lt (or multiple in order of importance, separated by spaces) |
End-User’s preferred language for authentication. Determines the language used on the login page. The first found match with supported values will be set as the app language. If not set (or none are supported), app tries to determine the UI language from browser data etc. and defaults to 'en' if detection fails. |
|
No |
Base64 encoded hash of a unique challenge. |
Base64 encoded hash of a unique challenge. The code-challenge is created by SHA256 hashing the code_verifier and base64 URL encoding the resulting hash Base64UrlEncode(SHA256Hash(code_verifier)). You can view an example from https://tonyxu-io.github.io/pkce-generator/. |
|
No |
Must be 'S256'. |
The algorithm by which the challenge shall be verified on the server side. Must be present if client 'code-challenge-required' is true or if not using JWT authentication. |
|
No |
String with information for users for the SID authentication app |
Free text (max length 200 characters) value shown to Smart-ID users in the app during code choice. This can be the name of your service or provide more detailed info about the current interaction (like users name or order number etc). |
|
No |
String with information for users for the MID authentication app |
Free text (max length 40 characters for 'GSM-7', 20 characters for 'UCS-2') value shown to Mobile-ID users before asking authentication PIN. |
|
No |
Must be one of GSM-7, UCS-2 |
Specifies which characters and how many can be used in 'mid_confirmation_message'. GSM-7 allows 'mid_confirmation_message' to contain up to 40 characters from standard GSM 7-bit alpabet including up to 5 characters from extension table ( ´+€[]^|{}\ +´) . UCS-2 allows up to 20 characters from UCS-2 alpabet (this has all Cyrillic characters, ÕŠŽ šžõ and ĄČĘĖĮŠŲŪŽ ąčęėįšųūž). |
|
No |
Space separated string containing one or more of the following values: |
Optional value specifying authentication methods to be usable by the end-user. |
|
No |
Request parameters which the RP wishes to pass in a single, self-contained parameter |
Parameter representing the request as a JWT whose Claims are the request parameters |
| Scope claim | Description |
|---|---|
|
Family name |
|
First name |
|
Date of birth |
|
Full name |
|
Personal identification code |
|
Country code that has issued the personal identification code |
|
Actual age in completed years |
|
Verification of end-user being under certain age - if requested in scope, the parameter |
|
Verification of end-user being over certain age - if requested in scope, the parameter |
Signed Authentication Request
Request parameters can be passed also as JWTs by using the request parameter.
This parameter represents the request claims as JWT (Request Object) whose claims are the request parameters. Any of the request parameters as in Authentication Request Parameters can be passed using the request parameter (the same conditions to authentication request parameters apply (required vs optional, value)).
Note that response_type, client_id and scope MUST be included in the request root level. These MAY also be included in the JWT - in that case the values inside and outside JWT MUST match.
On root level, the scope parameter MUST contain the openid scope value.
If any parameter is included both outside AND inside JWT Request Object, the ones inside prevail when processed by authorization server.
When passing authentication request in a signed JWT, the JWT own claims are:
| Claim | Required | Value |
|---|---|---|
|
Yes |
Must equal "client_id" |
|
Yes |
Must equal "client_id" |
|
Yes |
Must be authorization server /token endpoint |
|
Yes |
Unique JWT ID used for verifying one-time use of JWT |
|
Yes |
JWT expiration time; after passing JWT is not accepted |
|
No |
Time of JWT generation |
{
"iss": "bank321",
"sub": "bank321",
"aud": "https://httpd-proxy",
"iat": 1747899848,
"exp": 1747903448,
"jti": "e212513d-f78d-45a3-8834-d68db5f4c4c7",
"client_id": "bank321",
"scope": "openid age_over personal_code given_name family_name name birthdate",
"response_type": "code",
"redirect_uri": "https://httpd-proxy/tester/callback/",
"state": "af0ifjsldkj",
"nonce": "n-0S6_WzA2Mj",
"code_challenge": "hKpKupTM391pE10xfQiorMxXarRKAHRhTfH_xkGf7U4",
"code_challenge_method": "S256",
"ui_locales": "et en",
"acr_values": "mid_ee mid_lt sid idcard",
"age_comparator": "18"
}
Supported cryptographies in signed JWT: RS256, RSA using SHA-256.
Authorization server validates JWT signature and payload fields on the JWT according to OpenID Connect specifications.
Please note that using request_uri parameter is not supported!
Authentication Flow Using PAR
Initial Authentication Request (/par)
OIDC requests are initiated via PAR (pushed authentication request). For this, a POST request with parameters formatted with application/x-www-form-urlencoded using a character encoding of UTF-8 is sent to OIDC_SERVICE/par.
See the request parameters described at Authentication Request Parameters.
PAR flow authentication request, Example 1: Request person’s full name and a verification that the person is over 18 years old
{
"response_type": "code",
"client_id": "CLIENT_ID",
"redirect_uri": "REDIRECT_URI",
"state": "STATE",
"nonce": "NONCE",
"scope": "openid https://id.authentigate.eu/claims/name https://id.authentigate.eu/claims/age_over",
"acr_values": "http://eidas.europa.eu/LoA/high",
"age_comparator": "18",
"code_challenge": "CODE_CHALLENGE",
"code_challenge_method": "S256",
"sid_confirmation_message": "FREETEXT",
"mid_confirmation_message": "FREETEXT",
"mid_confirmation_message_format": "GSM-7"
}
PAR flow authentication request, Example 2: Request person’s given name, family name, and age
{
"response_type": "code",
"client_id": "CLIENT_ID",
"redirect_uri": "REDIRECT_URI",
"state": "STATE",
"nonce": "NONCE",
"scope": "openid https://eidas.europa.eu/attributes/naturalperson/FirstName https://eidas.europa.eu/attributes/naturalperson/FamilyName https://id.authentigate.eu/claims/age",
"acr_values": "http://eidas.europa.eu/LoA/high",
"code_challenge": "CODE_CHALLENGE",
"code_challenge_method": "S256",
"sid_confirmation_message": "FREETEXT",
"mid_confirmation_message": "FREETEXT",
"mid_confirmation_message_format": "GSM-7"
}
Please pay attention that client id and client secret should be passed in Authorization header of /par request in a format that OAuth 2.0 foresees for client secret authorization method.
According to OAuth 2.0 framework, Authorization header must be in the Authorization: Basic encodedString format, where the encodedString is a result of Base64 encoding of OAuth client’s clientID:clientSecret.
The oidc-service shall validate the authentication request and respond with a URI that the public client can use to start authentication.
HTTP/1.1 201 Created
Cache-Control: no-cache, no-store
Content-Type: application/json
{
"request_uri": "urn:ietf:params:oauth:request_uri:8Tw6nn6BAvoHBS5VM7M1UvndAAHdM5",
"expires_in": 90
}
Using the returned link, the app can open end-user’s browser with the corresponding url.
Authentication Redirect (/authorize)
The app should open the link with an external user agent as recommended by current OAuth2 for native clients best practices:
GET /authorize?client_id=EinLKYAAMqPr2Tw &request_uri=urn:ietf:params:oauth:request_uri:8Tw6nn6BAvoHBS5VM7M1UvndAAHdM5
After this, the user is redirected to the login service (located at OIDC_SERVICE/login).
After authentication, Token can be requested: see Token Request (/token) and Token Request Response
Authentication flow starting with authorization endpoint
Initial Authentication Request (/authorize)
OIDC requests are initiated via authorization endpoint. A POST or GET request with parameters formatted with application/x-www-form-urlencoded using a character encoding of UTF-8 is sent to OIDC_SERVICE/authorize.
See the request parameters described at Authentication Request Parameters.
{
"response_type": "code",
"client_id": "CLIENT_ID",
"redirect_uri": "REDIRECT_URI",
"state": "STATE",
"nonce": "NONCE",
"scope": "openid",
"acr_values": "http://eidas.europa.eu/LoA/high",
"code_challenge": "CODE_CHALLENGE",
"code_challenge_method": "S256",
"sid_confirmation_message": "FREETEXT",
"mid_confirmation_message": "FREETEXT",
"mid_confirmation_message_format": "GSM-7"
}
OIDC_SERVICE/authorize?scope=openid&response_type=code&redirect_uri=REDIRECT_URI&state=STATE&nonce=NONCE&code_challenge=CODE_CHALLENGE&code_challenge_method=S256
The user is redirected to the login service (located at OIDC_SERVICE/login).
Authentication Response
A standard HTTP 302 authentication response redirect is returned to the end-user if a successful authentication session exists.
The redirect points user’s browser back to RP’s registered redirect_uri where the RP shall verify the value of the state parameter.
Successful Response parameters:
| Parameter | Required | Value | Description |
|---|---|---|---|
|
Yes |
unique random string |
A single-use, client-bound, short-lived authorization code, that can be used at OIDC token endpoint to redeem the id-token. |
|
Yes |
unique random string |
RP’s state parameter value specified in the Authorization Request |
|
Yes |
URL |
RP’s redirect_uri specified in the Authorization Request |
HTTP/1.1 302 Found Location: https://client.example.org/callback?code=GaqukjWp4vvzEWHnLW7phLlwkpB0 &state=WDm4nExm1ADHzIEwoPxQ0KjBwnnk6NIrq178fU4rBDU
Unsuccessful response includes error, error description and state parameter value (must match with the value in request).
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
error=invalid_request
&error_description=
Request_uri%20invalid%20or%20expired
&state=af0ifjsldkj
Token Request (/token)
Upon receiving the authorization code from the successful authentication response and having performed all checks required by OIDC core specification (state), the RP backend service posts a backchannel request to the oidc-service /token endpoint.
Token request parameters:
| Parameter | Required | Value | Description |
|---|---|---|---|
|
Yes |
Must be |
Static value required by the OIDC core protocol |
|
Yes |
Unique random string |
Authorization code value returned from the OIDC-service |
|
No |
Unique random string |
High-entropy cryptographic random string. Related to code-challenge given in par request. Must be present if client 'code-challenge-required' is true or if not using JWT authentication |
|
No |
If present, must be 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer' |
Static value required by the OIDC core protocol. Must be present only if 'client_assertion' field is also present |
|
No |
Valid signed JWT |
Must contain a single valid JSON Web Token. Must be present only if 'client_assertion_type' field is also present |
|
Yes |
URL |
Must be identical to the parameter value that was included in the initial Authorization Request |
When passing token request in a signed JWT, the JWT own claims are:
| Claim | Required | Value |
|---|---|---|
|
Yes |
Must equal "client_id" |
|
Yes |
Must equal "client_id" |
|
Yes |
Must be authorization server /token endpoint |
|
Yes |
Unique JWT ID used for verifying one-time use of JWT |
|
Yes |
JWT expiration time; after passing JWT is not accepted |
|
No |
Time of JWT generation |
Authorization: basic authentication with client-id and client-secret; only required in case of client_secret_basic authentication method.
Header MUST NOT be present in case of private_key_jwt authentication method. See the examples below.
Token request examples:
client_secret_basic authentication:POST /token HTTP/1.1
Host: oidc.demo.sk.ee
Content-Type: application/x-www-form-urlencoded
Authorization: Basic c2FtcGxlX2NsaWVudF8xOjNkc8OEMDIrMSwubTExMmxrMjPDtmxrw7ZsazMyMw
grant_type=authorization_code
&code=GaqukjWp4vvzEWHnLW7phLlwkpB0
&code_verifier=yJhbGciOiJSUzI1NiIsImtpZ
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcallback
or
-
Using
private_key_jwtauthentication:
POST /token HTTP/1.1 Host: oidc.demo.sk.ee Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code=GaqukjWp4vvzEWHnLW7phLlwkpB0 &code_verifier=yJhbGciOiJSUzI1NiIsImtpZ &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer &client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJqdGkiOiAiY2ZiMDM5NGEtY2JlOS00MGE4LWEyNDQtZmNlM2Y0MTljNmRhIiwKICAic3ViIjogImJhbmsxMjMiLAogICJpc3MiOiAiYmFuazEyMyIsCiAgImF1ZCI6ICJodHRwczovL2F1dGguc2suZWUvdG9rZW4iLAogICJleHAiOiAxNzE0OTM3NjEwLAogICJpYXQiOiAxNzE0MDM3NjEwCn0=.zK6oUoDcxm-9w7hYpI8-IYlJr55k-S0LY0XvKDdBsuz8AJnZ6JEFS3GS_04SNVP02dqHq44ZGUbpRxkkAOJ8Su2zn7iJGaqr_MLchxddQiYYpHdOiKYqIQ-Yn3oleTlHed0ci84Kh7-BEQB_u7nv2-76wOe339OrHZuNeqejmGeQtMG7vzX5PMDF4wLjvrAxTIptTBKBWLGO02RusEI4uAC-4FrMjjbM4Ygc8U_i8BtZ-Is2FptJlpIAqjMTvGQZdEfenNZWzmVTYn9qKJ3ArXPZg5R07vqsx2YpMenXjbBc5TRS2FTVskwWvfTZn9_ygVvwR1wAzfNNfp7XPcQuUg &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcallback
Token Request Response
Authorization server validates the Token request as described in OpenID Connect Core 1.0 section 3.1.3.2.
If token request is invalid, authorization server constructs the error response with HTTP response code 400.
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_grant",
"error_description": "The provided authorization code is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."
}
If token request validation is successful, authorization server returns a an application/json media type response that includes ID token and access token. The ID token is a signed JWT that contains token claims, including the requested attributes of authenticated end-user.
On authorization server side, the session expires in 60 seconds.
Token response parameters:
| Parameter | Value | Description |
|---|---|---|
|
Unique random string |
An opaque random string |
|
Requested scopes |
Scope values as requested |
|
Expiration time in seconds |
|
|
JWT |
A serialized and signed JWT, including end-user claims requested in scope |
|
|
Access token Type |
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "SlAV32hkKG",
"token_type": "Bearer",
"scope": "openid https://id.authentigate.eu/claims/age_under"
"expires_in": 3600,
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZ...LrLl0nx7RkKU8NXNHq-rvKMzqg"
}
The RP must validate the id_token signature and claims as specified in the OIDC core specification.
Decoded ID-token claims:
| Claim | Required in token | Description |
|---|---|---|
|
Yes |
Pairwise subject unique identifier |
|
Yes |
Authentication Methods References |
|
Yes |
Issuer URL. Issuer identifier for the issuer of the response |
|
Yes |
Authentication flow requested response type used |
|
No |
Age comparison value from request (required if was provided in request) |
|
No |
Code challenge method - S256 or PLAIN |
|
No |
String value. Used to associate a Client session with an ID Token, and to mitigate replay attacks |
|
Yes |
RP id associated with the authentication flow |
|
Yes |
Audience that this ID Token is intended for. Contains the Relying Party ID as an audience value |
|
Yes |
Authentication Context Class Reference |
|
No |
Authentication Context Class Reference |
|
Yes |
RP-requested scope |
|
Yes |
acr_values value from request |
|
Yes |
Key-value map of end-user info claims as requested by RP in scope |
|
Yes |
RP-provided redirect url |
|
Yes |
RP-provided state value |
|
Yes |
Expiration time on or after which the ID Token MUST NOT be accepted for processing |
|
Yes |
Time at which the JWT was issued |
|
No |
Code challenge associated with the authorization code |
|
Yes |
A unique identifier for the token, which can be used to prevent reuse of the token |
Error Tracing
/par endpoint
/par response errors
| HTTP status code | Error code | Description |
|---|---|---|
405 |
invalid_request |
Method |
413 |
invalid_request |
The content length |
415 |
invalid_request |
Content Type |
429 |
too_many_requests |
Too many pending PAR requests |
500 |
server_error |
The authorization server encountered an unexpected condition that prevented it from fulfilling the request |
/par - request validation errors
| HTTP status code | Error code | Description | Parameter causing the error |
|---|---|---|---|
400 |
invalid_scope |
The requested scope is invalid. Client: [%s] is not allowed to request scope value(s): %s |
scope |
400 |
unsupported_response_type |
The authorization server does not support obtaining an authorization code using this method. |
response_type |
400 |
invalid_request |
Missing client_id parameter |
client_id |
400 |
invalid request |
authorization request not found for provided uri |
|
400 |
invalid request |
Missing state parameter |
state |
400 |
invalid request |
SID confirmation message too long |
sid_confirmation_message |
400 |
invalid request |
MID confirmation message too long |
mid_confirmation_message |
400 |
invalid request |
Missing mid_confirmation_message_format parameter |
mid_confirmation_message_format |
400 |
invalid request |
mid_confirmation_message_format must be one of: GSM-7, UCS-2 |
mid_confirmation_message_format |
400 |
invalid request |
Missing age_comparator parameter when using age_over or age_under scope |
age_comparator |
400 |
invalid request |
Missing code_challenge parameter |
code_challenge |
400 |
invalid request |
Parameter value for code_challenge_method is not supported. Supported values are: %s |
code_challenge_method |
400 |
invalid request |
Missing code_challenge_method parameter |
code_challenge_method |
400 |
invalid request |
Invalid redirect_uri. |
redirect_uri |
400 |
invalid request |
Invalid acr_values provided. Client: [%s] is not allowed to use acr [%s] |
acr_values |
400 |
invalid request |
Invalid acr values: %s. Supported values are: %s |
acr_values |
401 |
invalid_client |
Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method). |
/authorize endpoint
/authorize response errors
| HTTP status code | Error code | Description |
|---|---|---|
400 |
invalid_request |
Request_uri invalid or expired |
400 |
user_cancel |
User canceled authentication |
/authorize - standard flow
| HTTP status code | Error code | Description | Parameter causing the error |
|---|---|---|---|
400 |
invalid_scope |
The requested scope is invalid. Client: [%s] is not allowed to request scope value(s): %s |
scope |
400 |
unsupported_response_type |
The authorization server does not support obtaining an authorization code using this method. |
response_type |
400 |
invalid_request |
Missing client_id parameter |
client_id |
400 |
invalid_request |
Missing required parameters - request_uri or %s |
request_uri |
400 |
invalid_request |
Missing state parameter |
state |
400 |
invalid_request |
Parameter value for code_challenge_method is not supported. Supported values are: %s |
code_challenge_method |
400 |
invalid_request |
SID confirmation message too long |
sid_confirmation_message |
400 |
invalid_request |
Missing mid_confirmation_message_format parameter |
mid_confirmation_message_format |
400 |
invalid_request |
mid_confirmation_message_format must be one of: GSM-7, UCS-2 |
mid_confirmation_message_format |
400 |
invalid_request |
MID confirmation message too long |
mid_confirmation_message |
400 |
invalid_request |
Missing age_comparator parameter when using age_over or age_under scope |
age_comparator |
400 |
invalid_request |
Invalid acr values: [%s]. Supported values are: [%s] |
acr_values |
400 |
invalid_request |
Missing code_challenge parameter |
code_challenge |
400 |
invalid_request |
Missing code_challenge_method parameter |
code_challenge_method |
400 |
invalid_request |
Invalid redirect_uri. |
redirect_uri |
400 |
invalid_request |
Invalid acr_values provided. Client: [%s] is not allowed to use acr [%s] |
acr_values |
401 |
invalid_client |
Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method). |
/authorize - JWT flow
| HTTP status code | Error code | Description | Parameter causing the error |
|---|---|---|---|
400 |
invalid_scope |
The requested scope is invalid. Client: [<client_id>] is not allowed to request scope value(s): [<scope values in the request>] |
scope |
400 |
unsupported_response_type |
The authorization server does not support obtaining an authorization code using this method |
response_type |
400 |
invalid_request |
Missing client_id parameter |
client_id |
400 |
invalid_request |
Missing scope parameter |
scope |
400 |
invalid_request |
The scope must include an openid value |
scope |
400 |
invalid_request |
Invalid redirect_uri. |
redirect_uri |
400 |
invalid_request |
Missing response_type parameter |
response_type |
400 |
invalid_request |
Unsupported response_type parameter: Unsupported OpenID Connect response type value: invalid_type |
response_type |
400 |
invalid_request |
Missing client_id parameter |
client_id |
400 |
invalid_request |
Missing redirect_uri parameter |
redirect_uri |
400 |
invalid_request |
Missing state parameter |
state |
400 |
invalid_request |
Missing nonce parameter |
nonce |
400 |
invalid_request |
Invalid acr values: [%s]. Supported values are: [%s] |
acr_values |
400 |
invalid_request |
Invalid acr_values provided. Client: <client_id> is not allowed to use acr [<invalid acr value>] |
acr_values |
400 |
invalid_request |
Missing code_challenge parameter |
code_challenge |
400 |
invalid_request |
Missing code_challenge_method parameter |
code_challenge_method |
400 |
invalid_request |
Parameter value for code_challenge_method is not supported. Supported values are: [%s] |
code_challenge_method |
400 |
invalid_request |
SID confirmation message too long |
sid_confirmation_message |
400 |
invalid_request |
MID confirmation message too long |
mid_confirmation_message |
400 |
invalid_request |
Missing mid_confirmation_message_format parameter |
mid_confirmation_message_format |
400 |
invalid_request |
mid_confirmation_message_format must be one of: GSM-7, UCS-2 |
mid_confirmation_message_format |
400 |
invalid_request |
Missing age_comparator parameter when using age_over or age_under scope |
age_comparator |
400 |
invalid_request |
Missing required parameters - [%s] |
|
400 |
invalid_request |
Invalid signed request JWT |
|
400 |
invalid_request |
Failed to extract claims from JWT |
|
400 |
invalid_request |
Invalid 'iss' value. |
|
400 |
invalid_request |
Signed request 'iss' does not match provided client_id. |
|
400 |
invalid_request |
Invalid client assertion. |
|
400 |
invalid_request |
Invalid 'jti' value. |
|
400 |
invalid_request |
Invalid 'exp' value. |
|
400 |
invalid_request |
Invalid 'iat' value. |
|
400 |
invalid_request |
Invalid 'aud' for request object (none provided). |
|
400 |
invalid_request |
Invalid 'aud' for request object (must match OP issuer). |
|
400 |
invalid_request |
Invalid 'sub' value: must match client_id |
|
400 |
invalid_request |
Parameter 'request' is not allowed inside signed 'request' JWT parameter. |
|
400 |
invalid_request |
Parameter 'client_id' included in signed 'request' JWT parameter does not match the one provided in request. |
|
400 |
invalid_request |
Parameter 'response_type' included in signed 'request' JWT parameter does not match the one provided in request. |
|
400 |
invalid_request |
Parameter 'scope' included in signed 'request' JWT parameter does not match the one provided in request. |
|
400 |
invalid_request |
Failed to build request from AuthorizeRequest |
|
401 |
invalid_client |
Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method). |
/token endpoint
/token - JWT flo
| HTTP status code | Error code | Description |
|---|---|---|
400 |
invalid_request |
Required Body [tokenRequest] not specified |
400 |
invalid_request |
'grant’ must not be blank |
400 |
invalid_request |
'code’ must not be blank |
400 |
invalid_request |
Invalid client assertion type. |
400 |
invalid_request |
'redirectUri’ must not be null |
400 |
invalid_request |
Missing 'client_assertion’ parameter. |
400 |
invalid_request |
Missing 'client_assertion_type' parameter. |
400 |
invalid_request |
Session is expired. |
400 |
invalid_request |
Missing code_verifier parameter |
400 |
invalid_request |
No code_challenge parameter was provided previously |
400 |
invalid_request |
authorization request not found for provided uri |
400 |
invalid_request |
The request is missing a required parameter, includes an unsupported parameter value (other than grant type), |
400 |
invalid_request |
Invalid client assertion. |
400 |
invalid_request |
Invalid 'iss' value. |
400 |
invalid_request |
Invalid 'sub' value. |
400 |
invalid_request |
Invalid 'jti' value. |
400 |
invalid_request |
Invalid 'aud' value. |
400 |
invalid_request |
Invalid 'exp' value. |
400 |
invalid_request |
Invalid 'iat' value. |
400 |
invalid_grant |
The provided authorization code is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. |
400 |
unsupported_grant_type |
The authorization grant type is not supported by the authorization server. |
401 |
invalid_client |
Authenticated client id (%s) and session client value (%s) do not match |
401 |
invalid_client |
Authenticated client id (%s) and authentication request client value (%s) do not match |
401 |
invalid_client |
Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method). |
/token - basic authentication flow
| HTTP status code | Error code | Description |
|---|---|---|
400 |
invalid_request |
Required Body [tokenRequest] not specified |
400 |
invalid_request |
'grant’ must not be blank |
400 |
invalid_request |
'code’ must not be blank |
400 |
invalid_request |
Invalid client assertion type. |
400 |
invalid_request |
'redirectUri’ must not be null |
400 |
invalid_request |
Missing 'client_assertion’ parameter. |
400 |
invalid_request |
Missing 'client_assertion_type' parameter. |
400 |
invalid_request |
Session is expired. |
400 |
invalid_request |
Missing code_verifier parameter |
400 |
invalid_request |
No code_challenge parameter was provided previously |
400 |
invalid_request |
authorization request not found for provided uri |
400 |
invalid_request |
The request is missing a required parameter, includes an unsupported parameter value (other than grant type), |
400 |
invalid_grant |
The provided authorization code is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. |
400 |
unsupported_grant_type |
The authorization grant type is not supported by the authorization server. |
401 |
invalid_client |
Authenticated client id (%s) and session client value (%s) do not match |
401 |
invalid_client |
Authenticated client id (%s) and authentication request client value (%s) do not match |