diff --git a/IAM/index.html b/IAM/index.html index 72ed5e02b..dd5354346 100644 --- a/IAM/index.html +++ b/IAM/index.html @@ -1 +1 @@ - IAM - itsme OIDC Documentation IAM | itsme OIDC Documentation Link Search Menu Expand Document

What is an IAM platform?

An Identity and Access Management platform is a service that allows companies to manage identities in a centralized way. These identities can be collected from different parties (Identity Providers) and different ways can be offered to end-users to prove their identity (password, itsme…).

Integrating itsme® on an IAM platform

Most IAM platforms allow for the usage of different Identity Providers (IdP), either as pre-configured partners or via standardized communication protocols to be configured with the right parameters.

OpenId Connect is the most common of those protocols and the one that itsme® strictly adheres to, which means that itsme® can be used as an IdP on pretty much any IAM platform. However, depending on the way each platform implemented the protocol and on the configurability they offer, not all features of itsme® will always be available. In general, we outline 3 attention points:

1) Type of service from itsme®: In general, only Identification and Authentication are available through an IAM platform. The Confirmation service from itsme® implies not only data communication from itsme® to the platform, but also communication from the platform to itsme® of the content to be confirmed. IAM platforms in general are not equipped for bi-directional communication.

2) Authentication Method: itsme® allows partners to authenticate via 2 of the authentication specified by OpenId Connect: private_key_jwt is the most secure way, relying on asymmetric cryptography, while client_secret_post relies on symmetric cryptography. Most platforms will only support integration with itsme® through the Client Secret option either because they don’t support private_key_jwt at all or because they have only basic support for it, not allowing signed and encrypted tokens at each step of the flow.

3) Available attributes: While itsme® offers a broad range of identity attributes for each user (called “claims” in OIDC), not all IAM platforms allow you to take advantage of all claims:

  • OIDC makes use of the concept of “scopes”, regrouping a predefined set of claims. Some platforms only allow to request scopes, not individual claims, making it impossible to retrieve claims that are not part of a scope.
  • Most of our claims are returning a string value (“Name”:”John Smith”) but some are returning a structured JSON object, like address: {“street_adress”:”Station Street 34”, “postal_code”:”12345”}. Some platforms are only able to handle simple strings, not objects.

Here is a table of all the itsme® claims with their respective scope (if any) and format. See https://belgianmobileid.github.io/doc/authentication/#authorization-request for more details about each of these claims.

Claim Scope Format
name profile string
given_name profile string
family_name profile string
birthdate profile string
http://itsme.services/v2/claim/birthdate_as_string / string
gender profile string
locale profile string
picture profile string
http://itsme.services/v2/claim/physical_person_photo / string
email email string
email_verified email string
phone_number phone string
phone_number_verified phone string
address address JSON object
http://itsme.services/v2/claim/claim_citizenship / string
http://itsme.services/v2/claim/claim_citizenship_as_iso / string
http://itsme.services/v2/claim/place_of_birth / string
http://itsme.services/v2/claim/BEeidSn eid string
http://itsme.services/v2/claim/BENationalNumber eid string
http://itsme.services/v2/claim/claim_device / JSON object
http://itsme.services/v2/claim/transaction_info / JSON object
http://itsme.services/v2/claim/validityFrom / JSON object
http://itsme.services/v2/claim/validityTo / JSON object
http://itsme.services/v2/claim/verificationDate address JSON object
http://itsme.services/v2/claim/IDDocumentSN / string
http://itsme.services/v2/claim/IDDocumentType / string
http://itsme.services/v2/claim/IDIssuingCountry / JSON object
http://itsme.services/v2/claim/issuance_locality / JSON object
http://itsme.services/v2/claim/app / JSON object
http://itsme.services/v2/claim/account / JSON object
http://itsme.services/v2/claim/transaction_ip / string

List of platforms

Based on past experiences, we put together a list of the main platforms we encountered with the characteristics we noticed for each of them. This table is given without any formal guarantee and some of this information might be outdated when you read it.

Platform Supported claims Note
MS Azure AD B2C String only The GUI "User Flow" method only gives access to sub, name and email. Other claims require to use the Identity Experience Framework with custom policies, configured via complex XML files. Client Secret only.
ForgeRock Identity Platform All Complete support of jwt_private_key and Client Secret
Amazon Cognito Scopes only Client Secret only
Auth0 Scopes only Client Secret only
Okta Scopes only Client Secret only
+ IAM - itsme OIDC Documentation IAM | itsme OIDC Documentation Link Search Menu Expand Document

What is an IAM platform?

An Identity and Access Management platform is a service that allows companies to manage identities in a centralized way. These identities can be collected from different parties (Identity Providers) and different ways can be offered to end-users to prove their identity (password, itsme…).

Integrating itsme® on an IAM platform

Most IAM platforms allow for the usage of different Identity Providers (IdP), either as pre-configured partners or via standardized communication protocols to be configured with the right parameters.

OpenId Connect is the most common of those protocols and the one that itsme® strictly adheres to, which means that itsme® can be used as an IdP on pretty much any IAM platform. However, depending on the way each platform implemented the protocol and on the configurability they offer, not all features of itsme® will always be available. In general, we outline 3 attention points:

1) Type of service from itsme®: In general, only Identification and Authentication are available through an IAM platform. The Confirmation service from itsme® implies not only data communication from itsme® to the platform, but also communication from the platform to itsme® of the content to be confirmed. IAM platforms in general are not equipped for bi-directional communication.

2) Authentication Method: itsme® allows partners to authenticate via 2 of the authentication specified by OpenId Connect: private_key_jwt is the most secure way, relying on asymmetric cryptography, while client_secret_post relies on symmetric cryptography. Most platforms will only support integration with itsme® through the Client Secret option either because they don’t support private_key_jwt at all or because they have only basic support for it, not allowing signed and encrypted tokens at each step of the flow.

3) Available attributes: While itsme® offers a broad range of identity attributes for each user (called “claims” in OIDC), not all IAM platforms allow you to take advantage of all claims:

  • OIDC makes use of the concept of “scopes”, regrouping a predefined set of claims. Some platforms only allow to request scopes, not individual claims, making it impossible to retrieve claims that are not part of a scope.
  • Most of our claims are returning a string value (“Name”:”John Smith”) but some are returning a structured JSON object, like address: {“street_adress”:”Station Street 34”, “postal_code”:”12345”}. Some platforms are only able to handle simple strings, not objects.

Here is a table of all the itsme® claims with their respective scope (if any) and format. See https://belgianmobileid.github.io/doc/authentication/#authorization-request for more details about each of these claims.

Claim Scope Format
name profile string
given_name profile string
family_name profile string
birthdate profile string
http://itsme.services/v2/claim/birthdate_as_string / string
gender profile string
locale profile string
picture profile string
http://itsme.services/v2/claim/physical_person_photo / string
email email string
email_verified email string
phone_number phone string
phone_number_verified phone string
address address JSON object
http://itsme.services/v2/claim/claim_citizenship / string
http://itsme.services/v2/claim/claim_citizenship_as_iso / string
http://itsme.services/v2/claim/place_of_birth / string
http://itsme.services/v2/claim/BEeidSn eid string
http://itsme.services/v2/claim/BENationalNumber eid string
http://itsme.services/v2/claim/claim_device / JSON object
http://itsme.services/v2/claim/transaction_info / JSON object
http://itsme.services/v2/claim/validityFrom / JSON object
http://itsme.services/v2/claim/validityTo / JSON object
http://itsme.services/v2/claim/verificationDate address JSON object
http://itsme.services/v2/claim/IDDocumentSN / string
http://itsme.services/v2/claim/IDDocumentType / string
http://itsme.services/v2/claim/IDIssuingCountry / JSON object
http://itsme.services/v2/claim/issuance_locality / JSON object
http://itsme.services/v2/claim/app / JSON object
http://itsme.services/v2/claim/account / JSON object
http://itsme.services/v2/claim/transaction_ip / string

List of platforms

Based on past experiences, we put together a list of the main platforms we encountered with the characteristics we noticed for each of them. This table is given without any formal guarantee and some of this information might be outdated when you read it.

Platform Supported claims Note
MS Azure AD B2C String only The GUI "User Flow" method only gives access to sub, name and email. Other claims require to use the Identity Experience Framework with custom policies, configured via complex XML files. Client Secret only.
ForgeRock Identity Platform All Complete support of jwt_private_key and Client Secret
Amazon Cognito Scopes only Client Secret only
Auth0 Scopes only Client Secret only
Okta Scopes only Client Secret only
diff --git a/JOSE/index.html b/JOSE/index.html index 0d538b647..220afec0d 100644 --- a/JOSE/index.html +++ b/JOSE/index.html @@ -1,4 +1,4 @@ - JS Object Signing & Encryption - itsme OIDC Documentation JS Object Signing & Encryption | itsme OIDC Documentation Link Search Menu Expand Document

Introduction

The concepts of JWT, JWS, JWE and JWK are part of the JSON Object Signing and Encryption (JOSE) framework that intends to provide a method to securely transfer claims between parties.

All these technologies can be used collectively to encrypt and/or sign content using a variety of algorithms. While the full set of permutations is extremely large, and might be daunting to some, it is expected that most applications will only use a small set of algorithms to meet their needs.

Definitions

The JSON Object Signing and Encryption (JOSE) framework consists of several technologies:

  • JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure, as the plaintext of a JSON Web Encryption (JWE) structure or enclosed in another JWE or JWS structure to create a Nested JWT, enabling nested signing and encryption to be performed. In fact a JWT does not exist itself — either it has to be a JWS and/or a JWE. It’s like an abstract class — the JWS and JWE are the concrete implementations.
  • JSON Web Signature (JWS) represents signed content using JSON data structures and base64url encoding as defined in the specifications.
  • JSON Web Encryption (JWE) specification standardizes the way to represent an encrypted content in a JSON-based data structure.
  • JSON Web Key (JWK) defines a consistent way to represent a cryptographic key in a JSON structure which is used to sign (JWS) and/or encrypt (JWE) a specific content. The JSON Web Key Set (JWKS) extension defines a consistent way to represent a set of cryptographic keys in a JSON structure. As itsme® only support the RSA cryptosystem, it requires that each party exposes its public keys as a simple JWK Set document on a URI accessible to all.
    • For itsme®, this URI can be retrieved from the itsme® Discovery document, using the "jwks_uri" key.
    • Your JWK Set document MUST be accessible via the URI communicated when setting up your project in the itsme® B2B portal or via email to onboarding@itsme-id.com.

Creating your JWK Set URI

The JWK is nothing more than another representation of the (public) key of a certificate keypair and the JWK Set is simply a list of one or more JWK.

So, you need to have/create your certificate key pairs (a key pair consists of a public key and a private key): you will need one pair for encryption and one pair for signing actions.

You can use your certificates or (preferably) get them through a certificate authority.

Next, you will need to ‘convert’ the PUBLIC keys (NOT the private key. You MUST keep the private key always private) to JWK and group them in a JWK Set. There are various tools that can be used and all major programming languages support have libraries available to do this for you.

The resulting JWK Set MUST contain (at least) 2 JWK: one whereby the “use” parameter is ”enc” (for encryption) and another with “sig” (for signature).

This JWK Set is nothing more than a plain text file (“JSON” format) and you should place that on a publicly available website under https schema (with EV/OV certificate) and share that link with us if you have no access to itsme® B2B portal yet. As these are the PUBLIC keys, there is no problem to share this information publicly: in other words, it should not be placed behind a password or login screen. We expect that your server where jwkset is hosted responds fast, e.g. faster than 1000ms.

Some more (technical) documentation on https://tools.ietf.org/html/rfc7517.

Signing, encrypting and decrypting

1. Signing

A signed content can be serialized in two ways: the JWS compact serialization and the JWS JSON serialization. Because the OpenID Connect specification mandates to use JWS compact serialization whenever necessary, we will not explain the JWS JSON serialization signing process in this document.

Following steps will show you how to generate a JWS Compact Serialization object:

  1. Build a JSON object including the below header elements, which express the cryptographic properties of the JWS object — this is known as the JWS Header.
  2. alg
    Required
    Identifies the cryptographic algorithm used to secure the JWS. This MUST be set to "RS256"
    kid
    Optionnal
    Hint indicating which key was used to secure the JWS. The structure of the kid value is a case-sensitive string. In case there are multiple signing keys referenced in your JWK Set document then a kid MUST be present.
  3. The JWS Header will then be encoded using UTF-8 and base64url to produce the string below.
  4. +     JS Object Signing & Encryption - itsme OIDC Documentation       JS Object Signing & Encryption | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

    Introduction

    The concepts of JWT, JWS, JWE and JWK are part of the JSON Object Signing and Encryption (JOSE) framework that intends to provide a method to securely transfer claims between parties.

    All these technologies can be used collectively to encrypt and/or sign content using a variety of algorithms. While the full set of permutations is extremely large, and might be daunting to some, it is expected that most applications will only use a small set of algorithms to meet their needs.

    Definitions

    The JSON Object Signing and Encryption (JOSE) framework consists of several technologies:

    • JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure, as the plaintext of a JSON Web Encryption (JWE) structure or enclosed in another JWE or JWS structure to create a Nested JWT, enabling nested signing and encryption to be performed. In fact a JWT does not exist itself — either it has to be a JWS and/or a JWE. It’s like an abstract class — the JWS and JWE are the concrete implementations.
    • JSON Web Signature (JWS) represents signed content using JSON data structures and base64url encoding as defined in the specifications.
    • JSON Web Encryption (JWE) specification standardizes the way to represent an encrypted content in a JSON-based data structure.
    • JSON Web Key (JWK) defines a consistent way to represent a cryptographic key in a JSON structure which is used to sign (JWS) and/or encrypt (JWE) a specific content. The JSON Web Key Set (JWKS) extension defines a consistent way to represent a set of cryptographic keys in a JSON structure. As itsme® only support the RSA cryptosystem, it requires that each party exposes its public keys as a simple JWK Set document on a URI accessible to all.
      • For itsme®, this URI can be retrieved from the itsme® Discovery document, using the "jwks_uri" key.
      • Your JWK Set document MUST be accessible via the URI communicated when setting up your project in the itsme® B2B portal or via email to onboarding@itsme-id.com.

    Creating your JWK Set URI

    The JWK is nothing more than another representation of the (public) key of a certificate keypair and the JWK Set is simply a list of one or more JWK.

    So, you need to have/create your certificate key pairs (a key pair consists of a public key and a private key): you will need one pair for encryption and one pair for signing actions.

    You can use your certificates or (preferably) get them through a certificate authority.

    Next, you will need to ‘convert’ the PUBLIC keys (NOT the private key. You MUST keep the private key always private) to JWK and group them in a JWK Set. There are various tools that can be used and all major programming languages support have libraries available to do this for you.

    The resulting JWK Set MUST contain (at least) 2 JWK: one whereby the “use” parameter is ”enc” (for encryption) and another with “sig” (for signature).

    This JWK Set is nothing more than a plain text file (“JSON” format) and you should place that on a publicly available website under https schema (with EV/OV certificate) and share that link with us if you have no access to itsme® B2B portal yet. As these are the PUBLIC keys, there is no problem to share this information publicly: in other words, it should not be placed behind a password or login screen. We expect that your server where jwkset is hosted responds fast, e.g. faster than 1000ms.

    Some more (technical) documentation on https://tools.ietf.org/html/rfc7517.

    Signing, encrypting and decrypting

    1. Signing

    A signed content can be serialized in two ways: the JWS compact serialization and the JWS JSON serialization. Because the OpenID Connect specification mandates to use JWS compact serialization whenever necessary, we will not explain the JWS JSON serialization signing process in this document.

    Following steps will show you how to generate a JWS Compact Serialization object:

    1. Build a JSON object including the below header elements, which express the cryptographic properties of the JWS object — this is known as the JWS Header.
    2. alg
      Required
      Identifies the cryptographic algorithm used to secure the JWS. This MUST be set to "RS256"
      kid
      Optionnal
      Hint indicating which key was used to secure the JWS. The structure of the kid value is a case-sensitive string. In case there are multiple signing keys referenced in your JWK Set document then a kid MUST be present.
    3. The JWS Header will then be encoded using UTF-8 and base64url to produce the string below.
    4.  eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9
       
    5. Construct the payload or the content to be signed as UTF-8 — this is known as the JWS Payload.
    6. The JWS Payload will then be encoded using base64url to produce the string below.
    7.  SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0b
      diff --git a/QES-CSC/index.html b/QES-CSC/index.html
      index 4dec71219..f3e106bee 100644
      --- a/QES-CSC/index.html
      +++ b/QES-CSC/index.html
      @@ -1,4 +1,4 @@
      -     CSC Qualified Signature - itsme OIDC Documentation       CSC Qualified Signature | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

      Introduction

      itsme® is a trusted identity provider allowing partners to use verified identities for authentication, authorization and signature on web desktop, mobile web and mobile applications.

      The CSC API is an API built based on the CSC specification version 1.0.4.0. See https://cloudsignatureconsortium.org and https://cloudsignatureconsortium.org/resources/download-api-specifications to get the specification. The spec is implemented based on the OAuth2 specification.

      The objective of this document is to provide all the information needed to integrate the AUTH service using the OAuth specifications.

      At this moment only the Hash(es) Signing variant is available and documented. In this variant, an external Signature Creation Application (SCA) will provide the What You See Is What You Sign (WYSIWYS) experience to the User, provide the hash of the data to be signed to the itsme® service and use the returned digital signature value to format the signature in one of the AdES formats.

      Particularities compared to the CSC Specification

      • No implementation of / no support for:
        • Auth/Login method
        • Credentials/Authorize
        • Credentials/ExtendTransaction
        • Credentials/sendOTP
        • Signatures/Timestamp
      • OAuth2/Token request
        • This operation supports both application/json and application/x-www-form-urlencoded

      Audience

      This document is intended to be read by developers of any Signature Creation Application party. Partners who wish to use the itsme sign service through an existing SCA should refer to this SCA instead.

      Prerequisites

      Before you can integrate your application with itsme® Sign service, you MUST set up a project in the itsme® B2B portal to obtain all the needed information.

      Please be aware that we support performing up to 70 signatures within 1 itsme® action, but this is an extra option. If you want to make use of it, be sure to mention it to the Onboarding team while setting up your project.

      Integrating Sign services

      The itsme® Sign flow goes through the steps shown in the sequence diagram below.

      Sequence diagram describing the CSC Hash Signing flow

      1. Getting endpoint info

      To simplify implementations and increase flexibility, a JSON document is available containing key-value pairs which provide details about CSC configuration, such as the different endpoints, the base URI, region and so on.

      The method requires a post with a JSON body where you can provide the language of the document you want to retrieve. Supported languages are; EN, FR, NL, DE and their respective ISO language codes. If the language is not supported, English will be used.

      Example:

      POST /info
      +     CSC Qualified Signature - itsme OIDC Documentation       CSC Qualified Signature | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

      Introduction

      itsme® is a trusted identity provider allowing partners to use verified identities for authentication, authorization and signature on web desktop, mobile web and mobile applications.

      The CSC API is an API built based on the CSC specification version 1.0.4.0. See https://cloudsignatureconsortium.org and https://cloudsignatureconsortium.org/resources/download-api-specifications to get the specification. The spec is implemented based on the OAuth2 specification.

      The objective of this document is to provide all the information needed to integrate the AUTH service using the OAuth specifications.

      At this moment only the Hash(es) Signing variant is available and documented. In this variant, an external Signature Creation Application (SCA) will provide the What You See Is What You Sign (WYSIWYS) experience to the User, provide the hash of the data to be signed to the itsme® service and use the returned digital signature value to format the signature in one of the AdES formats.

      Particularities compared to the CSC Specification

      • No implementation of / no support for:
        • Auth/Login method
        • Credentials/Authorize
        • Credentials/ExtendTransaction
        • Credentials/sendOTP
        • Signatures/Timestamp
      • OAuth2/Token request
        • This operation supports both application/json and application/x-www-form-urlencoded

      Audience

      This document is intended to be read by developers of any Signature Creation Application party. Partners who wish to use the itsme sign service through an existing SCA should refer to this SCA instead.

      Prerequisites

      Before you can integrate your application with itsme® Sign service, you MUST set up a project in the itsme® B2B portal to obtain all the needed information.

      Please be aware that we support performing up to 70 signatures within 1 itsme® action, but this is an extra option. If you want to make use of it, be sure to mention it to the Onboarding team while setting up your project.

      Integrating Sign services

      The itsme® Sign flow goes through the steps shown in the sequence diagram below.

      Sequence diagram describing the CSC Hash Signing flow

      1. Getting endpoint info

      To simplify implementations and increase flexibility, a JSON document is available containing key-value pairs which provide details about CSC configuration, such as the different endpoints, the base URI, region and so on.

      The method requires a post with a JSON body where you can provide the language of the document you want to retrieve. Supported languages are; EN, FR, NL, DE and their respective ISO language codes. If the language is not supported, English will be used.

      Example:

      POST /info
       {
         "lang": ""
       }
      diff --git a/QES-OASIS/index.html b/QES-OASIS/index.html
      index be68ded63..bf085e248 100644
      --- a/QES-OASIS/index.html
      +++ b/QES-OASIS/index.html
      @@ -1,4 +1,4 @@
      -     OASIS Qualified Signature - itsme OIDC Documentation       OASIS Qualified Signature | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

      Introduction

      itsme® is a trusted identity provider allowing partners to use verified identities for authentication and authorization on web desktop, mobile web and mobile applications.

      The objective of this document is to provide all the information needed to integrate the Sign service. This implementation of the Sign service is based on Oasis Digital Signature Services (DSS) protocol, using an asynchronous pattern in a pre-2.0 fashion.

      At this moment only the Hash(es) Signing variant is available and documented. In this variant, an external Signature Creation Application (SCA) will provide the What You See Is What You Sign (WYSIWYS) experience to the User, provide the hash of the data to be signed to the itsme® service and use the returned digital signature value to format the signature in one of the AdES formats.

      Audience

      This document is intended to be read by developers of any Signature Creation Application party. Partners who wish to use the itsme sign service through an existing SCA should refer to this SCA instead.

      Prerequisites

      Before you can integrate your application with itsme® Sign service, you MUST set up a project in the itsme® B2B portal to obtain all the needed information.

      Please be aware that we support performing up to 70 signatures within 1 itsme® action, but this is an extra option. If you want to make use of it, be sure to mention it to the Onboarding team while setting up your project.

      Integrating Sign services

      The itsme® Sign flow goes through the steps shown in the sequence diagram below.

      Sequence diagram describing the Oasis Hash Signing flow

      1. The User indicates on your end he wishes to sign a document with itsme®
      2. Your web desktop, mobile web or mobile SCA application sends a request to itsme® Integration Layer Back-End in order to create the User’s Identification session and obtain the User’s signing certificate to be include in the data to be signed.
      3. itsme® returns the session id and the redirect URL specific to the User to your SCA Back-End.
      4. Your SCA Front-End redirects the User to the Integration Layer Front-End of itsme®, meaning that the User will be identified in the meanwhile (in case the "userCode" is transmitted by the SCA, this step will be skipped as the user will already be identified). If the User has no signature certificate yet, the certificate creation process will be initiated automatically.
      5. Finally, when the User is authenticated and has a signature certificate, he is redirected to the your SCA Front-End. The redirection to your SCA Front-End SHOULD be (almost) transparent to the User (with a possible displaying of a spinner) as the laps of time between step 5 and step 11 of this diagram SHOULD be extremely short.
      6. Your SCA Back-End contacts the itsme® Integration Layer Back-End to get the signature certificate of the User.
      7. The itsme® Integration Layer Back-End returns your SCA Back-End the signer information as well as the signature certificate of the User.
      8. Your SCA Back-End constructs the data to be signed and the hash(es) of the signature(s) will be computed by yourself. We support up to 70 hashes in 1 flow. The value of a hash MUST be base64url encoded.
      9. Your SCA Back-End will provide the hash(es) to the itsme® Integration Layer Back-End to request the digital signature value.
      10. A session id and redirect URL are returned by itsme® to your SCA Back-End.
      11. Your SCA frontend will then redirect the User to the signature webpage of itsme®, where he is guided through the itsme part of the signing flow.
      12. The session of the User at itsme® side ends as the process is finished and the User is redirected to your SCA Front-End.
      13. Your SCA Back-End will contact the itsme® Integration Layer Back-End to check the signature status (same endpoint as for creating the signature session).
      14. itsme® then returns the signature completion status and the digital signature value(s).
      15. At this stage, your SCA is able to confirm the success of the operation and display a success message.

      1. Checking itsme® Sign configuration

      Two JSON documents are available to ease the integration of itsme sign service:

      • The discovery document
      • The swagger of the B2B interface

      Discovery document

      To simplify implementations and increase flexibility, the following key-value pairs about itsme® configuration can be retrieved from a JSON document:

      • the signature policies
      • commitment types
      • supported languages

      The JSON document for itsme® Sign service may be retrieved from BASE_URL/qes-partners/1.0.0/.well-known/configuration.

      Please note we are using SSLMA as authentication method, combined with IP filtering, as specified in SSLMA Authentication. If you need to access the discovery document before setting up the connectivity, you can use the public version here (this one is updated manually, while the previous one is automatically generated): https://belgianmobileid.github.io/doc/public/resources/qesdiscovery.json

      B2B interface swagger

      The swagger of the B2B interface (for the back-end to back-end calls) may be retrieved from https://belgianmobileid.github.io/doc/public/resources/qesB2B.json

      2. Starting a new User identification session

      This section relates to the step 2 of the sequence diagram.

      First, you will forge a HTTPS POST request that MUST be sent to the itsme® User Identification Endpoint, which is BASE_URL/qes-partners/1.0.0/user_identification. Please note we are using SSLMA as authentication method, combined with IP filtering, as specified in SSLMA Authentication.

      Below you will find the mandatory and optional parameters to integrate in the HTTPS POST request body formatted as application/json:

      partnerCode
      REQUIRED
      This MUST be the client identifier you received when registering your application during the onboarding process. This parameter will be translated to a label describing the customer for which the User is signing the document.
      userCode
      OPTIONAL
      The userCode is the unique identifier created by itsme for a user connecting with a Service Provider. A user has a different user code at each Service Provider. You SHOULD provide a "userCode" known by itsme if you already have authenticated the User who needs to sign the document. Providing a userCode will bypass the identification screen (user won't have to enter his phone number).
      serviceCode
      REQUIRED
      It MUST contain the value of the serviceCode defined for your application during the onboarding process.
      lang
      REQUIRED
      This parameters defines the recommended language to be used for GUI interaction.
      redirectUrl
      REQUIRED
      This is the URL to which the User will be redirected to your remote SCA. This MUST exactly match the redirect URL of the specified service defined when registering your application during the [onboarding process](#prerequisites).

      Example:

      POST /BASE_URL/qes-partners/1.0.0/user_identification HTTP/1.1
      +     OASIS Qualified Signature - itsme OIDC Documentation       OASIS Qualified Signature | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

      Introduction

      itsme® is a trusted identity provider allowing partners to use verified identities for authentication and authorization on web desktop, mobile web and mobile applications.

      The objective of this document is to provide all the information needed to integrate the Sign service. This implementation of the Sign service is based on Oasis Digital Signature Services (DSS) protocol, using an asynchronous pattern in a pre-2.0 fashion.

      At this moment only the Hash(es) Signing variant is available and documented. In this variant, an external Signature Creation Application (SCA) will provide the What You See Is What You Sign (WYSIWYS) experience to the User, provide the hash of the data to be signed to the itsme® service and use the returned digital signature value to format the signature in one of the AdES formats.

      Audience

      This document is intended to be read by developers of any Signature Creation Application party. Partners who wish to use the itsme sign service through an existing SCA should refer to this SCA instead.

      Prerequisites

      Before you can integrate your application with itsme® Sign service, you MUST set up a project in the itsme® B2B portal to obtain all the needed information.

      Please be aware that we support performing up to 70 signatures within 1 itsme® action, but this is an extra option. If you want to make use of it, be sure to mention it to the Onboarding team while setting up your project.

      Integrating Sign services

      The itsme® Sign flow goes through the steps shown in the sequence diagram below.

      Sequence diagram describing the Oasis Hash Signing flow

      1. The User indicates on your end he wishes to sign a document with itsme®
      2. Your web desktop, mobile web or mobile SCA application sends a request to itsme® Integration Layer Back-End in order to create the User’s Identification session and obtain the User’s signing certificate to be include in the data to be signed.
      3. itsme® returns the session id and the redirect URL specific to the User to your SCA Back-End.
      4. Your SCA Front-End redirects the User to the Integration Layer Front-End of itsme®, meaning that the User will be identified in the meanwhile (in case the "userCode" is transmitted by the SCA, this step will be skipped as the user will already be identified). If the User has no signature certificate yet, the certificate creation process will be initiated automatically.
      5. Finally, when the User is authenticated and has a signature certificate, he is redirected to the your SCA Front-End. The redirection to your SCA Front-End SHOULD be (almost) transparent to the User (with a possible displaying of a spinner) as the laps of time between step 5 and step 11 of this diagram SHOULD be extremely short.
      6. Your SCA Back-End contacts the itsme® Integration Layer Back-End to get the signature certificate of the User.
      7. The itsme® Integration Layer Back-End returns your SCA Back-End the signer information as well as the signature certificate of the User.
      8. Your SCA Back-End constructs the data to be signed and the hash(es) of the signature(s) will be computed by yourself. We support up to 70 hashes in 1 flow. The value of a hash MUST be base64url encoded.
      9. Your SCA Back-End will provide the hash(es) to the itsme® Integration Layer Back-End to request the digital signature value.
      10. A session id and redirect URL are returned by itsme® to your SCA Back-End.
      11. Your SCA frontend will then redirect the User to the signature webpage of itsme®, where he is guided through the itsme part of the signing flow.
      12. The session of the User at itsme® side ends as the process is finished and the User is redirected to your SCA Front-End.
      13. Your SCA Back-End will contact the itsme® Integration Layer Back-End to check the signature status (same endpoint as for creating the signature session).
      14. itsme® then returns the signature completion status and the digital signature value(s).
      15. At this stage, your SCA is able to confirm the success of the operation and display a success message.

      1. Checking itsme® Sign configuration

      Two JSON documents are available to ease the integration of itsme sign service:

      • The discovery document
      • The swagger of the B2B interface

      Discovery document

      To simplify implementations and increase flexibility, the following key-value pairs about itsme® configuration can be retrieved from a JSON document:

      • the signature policies
      • commitment types
      • supported languages

      The JSON document for itsme® Sign service may be retrieved from BASE_URL/qes-partners/1.0.0/.well-known/configuration.

      Please note we are using SSLMA as authentication method, combined with IP filtering, as specified in SSLMA Authentication. If you need to access the discovery document before setting up the connectivity, you can use the public version here (this one is updated manually, while the previous one is automatically generated): https://belgianmobileid.github.io/doc/public/resources/qesdiscovery.json

      B2B interface swagger

      The swagger of the B2B interface (for the back-end to back-end calls) may be retrieved from https://belgianmobileid.github.io/doc/public/resources/qesB2B.json

      2. Starting a new User identification session

      This section relates to the step 2 of the sequence diagram.

      First, you will forge a HTTPS POST request that MUST be sent to the itsme® User Identification Endpoint, which is BASE_URL/qes-partners/1.0.0/user_identification. Please note we are using SSLMA as authentication method, combined with IP filtering, as specified in SSLMA Authentication.

      Below you will find the mandatory and optional parameters to integrate in the HTTPS POST request body formatted as application/json:

      partnerCode
      REQUIRED
      This MUST be the client identifier you received when registering your application during the onboarding process. This parameter will be translated to a label describing the customer for which the User is signing the document.
      userCode
      OPTIONAL
      The userCode is the unique identifier created by itsme for a user connecting with a Service Provider. A user has a different user code at each Service Provider. You SHOULD provide a "userCode" known by itsme if you already have authenticated the User who needs to sign the document. Providing a userCode will bypass the identification screen (user won't have to enter his phone number).
      serviceCode
      REQUIRED
      It MUST contain the value of the serviceCode defined for your application during the onboarding process.
      lang
      REQUIRED
      This parameters defines the recommended language to be used for GUI interaction.
      redirectUrl
      REQUIRED
      This is the URL to which the User will be redirected to your remote SCA. This MUST exactly match the redirect URL of the specified service defined when registering your application during the [onboarding process](#prerequisites).

      Example:

      POST /BASE_URL/qes-partners/1.0.0/user_identification HTTP/1.1
       {
         "partnerCode":"myClientID",
         "serviceCode":"myServiceCode",
      diff --git a/TestLinks/index.html b/TestLinks/index.html
      index 462846182..4f3bdc763 100644
      --- a/TestLinks/index.html
      +++ b/TestLinks/index.html
      @@ -1 +1 @@
      -     App to App test links - itsme OIDC Documentation       App to App test links | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

      Requested data

      The login links request all data available. The confirm links request a basic set of data (profile, eid, address, email and phone number).

      Please note also the Confirm links are only valid for a limited amount of time. Under some occasions, the JWKSet of the test partner is re-generated, making the request object in the links below obsolete. To re-create new ones, please consult How to create A2A confirm links (hosted on BMID Confluence).

      Links

      UAT

      Login

      UAT - OIDC V1 login

      UAT - OIDC V2 login

      Share Data

      UAT - OIDC V2 share data

      UAT - OIDC V1 confirm

      UAT - OIDC V2 confirm

      Azure B2C ClientSecret

      UAT - Azure B2C

      E2E

      Login

      E2E - OIDC V1 login

      E2E - OIDC V2 login

      Share data

      E2E - OIDC V1 share data

      E2E - OIDC V2 share data

      Confirm

      E2E - OIDC V1 confirm

      E2E - OIDC V2 confirm

      Azure B2C ClientSecret

      E2E - Azure B2C

      PRD

      Login

      PRD - OIDC V1 login

      PRD - OIDC V2 login

      PRD DRP - OIDC V2 login

      Share data

      PRD - OIDC V2 share data

      Confirm

      PRD - OIDC V1 Confirm

      PRD - OIDC V2 Confirm

      Azure B2C ClientSecret

      PRD - Azure B2C

      + App to App test links - itsme OIDC Documentation App to App test links | itsme OIDC Documentation Link Search Menu Expand Document

      Requested data

      The login links request all data available. The confirm links request a basic set of data (profile, eid, address, email and phone number).

      Please note also the Confirm links are only valid for a limited amount of time. Under some occasions, the JWKSet of the test partner is re-generated, making the request object in the links below obsolete. To re-create new ones, please consult How to create A2A confirm links (hosted on BMID Confluence).

      Links

      UAT

      Login

      UAT - OIDC V1 login

      UAT - OIDC V2 login

      Share Data

      UAT - OIDC V2 share data

      UAT - OIDC V1 confirm

      UAT - OIDC V2 confirm

      Azure B2C ClientSecret

      UAT - Azure B2C

      E2E

      Login

      E2E - OIDC V1 login

      E2E - OIDC V2 login

      Share data

      E2E - OIDC V1 share data

      E2E - OIDC V2 share data

      Confirm

      E2E - OIDC V1 confirm

      E2E - OIDC V2 confirm

      Azure B2C ClientSecret

      E2E - Azure B2C

      PRD

      Login

      PRD - OIDC V1 login

      PRD - OIDC V2 login

      PRD DRP - OIDC V2 login

      Share data

      PRD - OIDC V2 share data

      Confirm

      PRD - OIDC V1 Confirm

      PRD - OIDC V2 Confirm

      Azure B2C ClientSecret

      PRD - Azure B2C

      diff --git a/auth0/index.html b/auth0/index.html index 1f9285bd8..1424e42d7 100644 --- a/auth0/index.html +++ b/auth0/index.html @@ -1 +1 @@ - Auth0 - itsme OIDC Documentation Auth0 | itsme OIDC Documentation Link Search Menu Expand Document

      Prerequisites

      • Auth0 account and/or relevant subscription
      • Your Client ID, also known as Partner code, provided by itsme®.
      • Your Service code provided by itsme®.
      • Client secret provided by itsme®
      • redirect_uri you will be redirecting the user to. In Auth0, it is a generated callback url (please, provide it to onboarding@itsme-id.com)

      Configuration between Auth0 and itsme®

      1. Log in Auth0, go to Authentication => Enterprise => OpenID Connect => Create Connection
      2. Populate the details with the parameters you got from itsme®:
      Parameter Value
      issuer url
      back channel response_type=code
      ClientID Your Client ID, also known as Partner code
      Client Secret Your client_secret
      scopes openid profile email address eid service:YOURSERVICECODE
      callback url pass generated callback url to onboarding@itsme-id.com

      All other fields can be left on the default settings.

      1. Save and return to Authentication => Enterprise => OpenID Connect, click “Try” under newly created connection to test the flow.
      2. Under User Management, find test user and see raw json with requested data.

      Reference

      + Auth0 - itsme OIDC Documentation Auth0 | itsme OIDC Documentation Link Search Menu Expand Document

      Prerequisites

      • Auth0 account and/or relevant subscription
      • Your Client ID, also known as Partner code, provided by itsme®.
      • Your Service code provided by itsme®.
      • Client secret provided by itsme®
      • redirect_uri you will be redirecting the user to. In Auth0, it is a generated callback url (please, provide it to onboarding@itsme-id.com)

      Configuration between Auth0 and itsme®

      1. Log in Auth0, go to Authentication => Enterprise => OpenID Connect => Create Connection
      2. Populate the details with the parameters you got from itsme®:
      Parameter Value
      issuer url
      back channel response_type=code
      ClientID Your Client ID, also known as Partner code
      Client Secret Your client_secret
      scopes openid profile email address eid service:YOURSERVICECODE
      callback url pass generated callback url to onboarding@itsme-id.com

      All other fields can be left on the default settings.

      1. Save and return to Authentication => Enterprise => OpenID Connect, click “Try” under newly created connection to test the flow.
      2. Under User Management, find test user and see raw json with requested data.

      Reference

      diff --git a/authentication/index.html b/authentication/index.html index b268a2e81..4409c4a26 100644 --- a/authentication/index.html +++ b/authentication/index.html @@ -1,4 +1,4 @@ - Authentication API - itsme OIDC Documentation Authentication API | itsme OIDC Documentation Link Search Menu Expand Document

      Overview

      itsme® API is based on the Authorization Code Flow of OpenID Connect 1.0. The API can be used to verify your end-users’ identity and obtain some information about them. For the exact user data that can be requested, please see the Authorization Request parameters.

      The diagram below describes the Authentication process and how your systems should integrate with itsme® :

      Sequence diagram describing the OpenID flow

      To get to this result please make sure you

      1. add itsme® button to your front-end page so the user can indicate he wishes to authenticate with itsme® : itsme® button specifications.
      2. create the Authorization Request to authenticate the User. This request will redirect the user to the itsme® app. itsme® will then authenticates the user by asking him
        • to enter his phone number on the itsme® sign-in page
        • authorize the release of some information to your application
        • to provide his credentials (itsme® code, fingerprint or FaceID)

        It is also in this Authorization Request that you will be able to request claims about the user and the Authentication event.
      3. collect the Authorization Code once the user has been authenticated and redirected by itsme® to your mobile or web application.
      4. exchange the Authorization Code for an ID token (e.g. identifying the user) and an Access Token.
      5. Obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint if the required claims are not returned in the ID token.
      6. Confirm the success of the operation and display a success message.

      Onboarding

      To make use of our services, you will need to contact our Customer Care team at onboarding@itsme-id.com. Based on your requirements, they will configure for you a new partner in our database. You will receive the clientID corresponding to this partner, that you will need to include in your Authorization Request.

      Each partner can contain multiple “services”. Each service should correspond to one user flow at your side and can be of type Authentication, Identification or Confirmation. The service code will also be required in your Authorization Request.

      For each service, you will have to provide one or a few “redirect_uri”, which are the landing page(s) where the end user will be sent after authenticating with itsme. Only the URIs whitelisted in a service will be allowed in your Authorization Request, so they have to be fully determined before you can use the service. This whitelisting works on an “exact match” basis, including the full (case sensitive) path and query string so please communicate the exact string you are planning to use in your Authorization Request.

      Guides

      Generate itsme® button

      First, you will need to create a button to allow your users to authenticate with itsme®. Check the Button design guide before you start the integration.

      Upon clicking this button, the user will be redirected to our Front-End. itsme® then take care of their authentication”.

      Securing the exchange of information

      To protect the exchange of sensitive information and ensure the requested information gets issued to a legitimate application and not some other party, the OpenID Connect protocol uses JSON Web Token (JWT) which can be signed and/or encrypted. Among the methods described in OpenID specification, itsme® supports 2 authentication methods to secure communications between your backend and itsme®:

      • "Private key JWT" is based on a public/private key pair (asymmetric encryption). It is therefore the most secure option
      • "Client secret" is based on a shared Secret key (symmetric encryption). It can be easier to implement in some cases

      Public-private key pair and JWKSet URI

      This method uses a pair of keys (1 public, 1 private) to encrypt and decrypt senders’ and recipients’ sensitive data. It is also known as public-key cryptography or asymetric encryption.

      You can retrieve the itsme® JWK Set from the URI mentioned as jwks_uri in our itsme® Discovery document.

      Secret key method

      Secret key cryptography method uses the same secret key to encrypt and decrypt sensitive information. This approach is the inverse of public- and private-key encryption.

      This method requires the exchange of a static secret to be held by both the sender and the data receiver. The secret value will be provided by itsme® when registering your project.

      Key rotation procedure

      for public-private key pair and JWKSet URI

      itsme® backend has cache mechanism in place, which is sporadic (from 30min to 24h). During this time, we will keep on using old keys.

      Rotating signing key:

      • Add the new key to JWK set, with a new “kid”
      • Start using the new key to sign JWTs
      • When the flow is validated with the new key, remove the old one from the JWK set

      Rotating encryption key:

      • Replace the old key with the new one in JWK set, but still support old and new keys in decryption process
      • Wait 24h (or wait for “max-age” amount of time, if specified)
      • Decommission the old key completely

      Changing the key could come along with changing the jwkset url. If that is the case, communicate new available jwkset url to onboarding@itsme-id.com. It is not be possible to be perfectly in sync, a few failed flows should be expected in the lapse of time between jwkset url update and the key update at the partner’s side. Smoother way would be:

      • Copy the old jwkSet on the new URL
      • the URL is communicated & registered by itsme®
      • Rotate the keys in the jwkSet on the new URL as per rotating keys info above

      for secret key method

      Please, reach out to onboarding@itsme-id.com in case the secret key should be rotated.

      PKCE-enhanced flow

      Whatever the chosen authentication method, itsme® also supports an extra security extension named Proof of Key for Code Exchange (PKCE). This additionnal layer of security is intended to mitigate some Authorization Code interception attacks. For this mechanism to achieve its full potential, PKCE has to be made mandatory in your flow, which is an option we can enable for you (strongly recommended). Please ask our onboarding team to do so when registering your project.

      PKCE implies choosing a random string, named code_verifier, and then generating a SHA256 hash of that string, named code_challenge. The code_challenge has to be sent along with the Authorization Request, while the code_verifier must be sent with the Token Request, allowing our backend to make sure both requests are issued by the same source.

      code_challenge can then be obtained via this kind of instructions:

      var hash = code_verifier.createHash('sha256');
      +     Authentication API - itsme OIDC Documentation       Authentication API | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

      Overview

      itsme® API is based on the Authorization Code Flow of OpenID Connect 1.0. The API can be used to verify your end-users’ identity and obtain some information about them. For the exact user data that can be requested, please see the Authorization Request parameters.

      The diagram below describes the Authentication process and how your systems should integrate with itsme® :

      Sequence diagram describing the OpenID flow

      To get to this result please make sure you

      1. add itsme® button to your front-end page so the user can indicate he wishes to authenticate with itsme® : itsme® button specifications.
      2. create the Authorization Request to authenticate the User. This request will redirect the user to the itsme® app. itsme® will then authenticates the user by asking him
        • to enter his phone number on the itsme® sign-in page
        • authorize the release of some information to your application
        • to provide his credentials (itsme® code, fingerprint or FaceID)

        It is also in this Authorization Request that you will be able to request claims about the user and the Authentication event.
      3. collect the Authorization Code once the user has been authenticated and redirected by itsme® to your mobile or web application.
      4. exchange the Authorization Code for an ID token (e.g. identifying the user) and an Access Token.
      5. Obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint if the required claims are not returned in the ID token.
      6. Confirm the success of the operation and display a success message.

      Onboarding

      To make use of our services, you will need to contact our Customer Care team at onboarding@itsme-id.com. Based on your requirements, they will configure for you a new partner in our database. You will receive the clientID corresponding to this partner, that you will need to include in your Authorization Request.

      Each partner can contain multiple “services”. Each service should correspond to one user flow at your side and can be of type Authentication, Identification or Confirmation. The service code will also be required in your Authorization Request.

      For each service, you will have to provide one or a few “redirect_uri”, which are the landing page(s) where the end user will be sent after authenticating with itsme. Only the URIs whitelisted in a service will be allowed in your Authorization Request, so they have to be fully determined before you can use the service. This whitelisting works on an “exact match” basis, including the full (case sensitive) path and query string so please communicate the exact string you are planning to use in your Authorization Request.

      Guides

      Generate itsme® button

      First, you will need to create a button to allow your users to authenticate with itsme®. Check the Button design guide before you start the integration.

      Upon clicking this button, the user will be redirected to our Front-End. itsme® then take care of their authentication”.

      Securing the exchange of information

      To protect the exchange of sensitive information and ensure the requested information gets issued to a legitimate application and not some other party, the OpenID Connect protocol uses JSON Web Token (JWT) which can be signed and/or encrypted. Among the methods described in OpenID specification, itsme® supports 2 authentication methods to secure communications between your backend and itsme®:

      • "Private key JWT" is based on a public/private key pair (asymmetric encryption). It is therefore the most secure option
      • "Client secret" is based on a shared Secret key (symmetric encryption). It can be easier to implement in some cases

      Public-private key pair and JWKSet URI

      This method uses a pair of keys (1 public, 1 private) to encrypt and decrypt senders’ and recipients’ sensitive data. It is also known as public-key cryptography or asymetric encryption.

      You can retrieve the itsme® JWK Set from the URI mentioned as jwks_uri in our itsme® Discovery document.

      Secret key method

      Secret key cryptography method uses the same secret key to encrypt and decrypt sensitive information. This approach is the inverse of public- and private-key encryption.

      This method requires the exchange of a static secret to be held by both the sender and the data receiver. The secret value will be provided by itsme® when registering your project.

      Key rotation procedure

      for public-private key pair and JWKSet URI

      itsme® backend has cache mechanism in place, which is sporadic (from 30min to 24h). During this time, we will keep on using old keys.

      Rotating signing key:

      • Add the new key to JWK set, with a new “kid”
      • Start using the new key to sign JWTs
      • When the flow is validated with the new key, remove the old one from the JWK set

      Rotating encryption key:

      • Replace the old key with the new one in JWK set, but still support old and new keys in decryption process
      • Wait 24h (or wait for “max-age” amount of time, if specified)
      • Decommission the old key completely

      Changing the key could come along with changing the jwkset url. If that is the case, communicate new available jwkset url to onboarding@itsme-id.com. It is not be possible to be perfectly in sync, a few failed flows should be expected in the lapse of time between jwkset url update and the key update at the partner’s side. Smoother way would be:

      • Copy the old jwkSet on the new URL
      • the URL is communicated & registered by itsme®
      • Rotate the keys in the jwkSet on the new URL as per rotating keys info above

      for secret key method

      Please, reach out to onboarding@itsme-id.com in case the secret key should be rotated.

      PKCE-enhanced flow

      Whatever the chosen authentication method, itsme® also supports an extra security extension named Proof of Key for Code Exchange (PKCE). This additionnal layer of security is intended to mitigate some Authorization Code interception attacks. For this mechanism to achieve its full potential, PKCE has to be made mandatory in your flow, which is an option we can enable for you (strongly recommended). Please ask our onboarding team to do so when registering your project.

      PKCE implies choosing a random string, named code_verifier, and then generating a SHA256 hash of that string, named code_challenge. The code_challenge has to be sent along with the Authorization Request, while the code_verifier must be sent with the Token Request, allowing our backend to make sure both requests are issued by the same source.

      code_challenge can then be obtained via this kind of instructions:

      var hash = code_verifier.createHash('sha256');
       var code_challenge = base64url.encode(hash);
       

      Signing, encrypting and decoding JWTs

      Libraries implementing JWT and the JOSE specs JWS, JWE, JWK, and JWA are listed here. For testing purposes only, we could advise the use of https://mkjwk.org/ for JWK generation and https://mkjose.org/ for payload check => these are 2 open-source tools which will help you visualize JWK mechanisms, client assertion construct. Please DO NOT generate production private keys on any website. Rather opt for the relevant SDK library mentioned here.

      Certificates and website security

      itsme® requires https connections to guarantee security. With the https protocol, a web site operator obtains a certificate by applying to a certificate authority with a certificate signing request. The certificate request is an electronic document that contains the web site name, company information and the public key. The certificate provider signs the request, thus producing a public certificate. During web browsing, this public certificate is served to any web browser that connects to the web site and proves to the web browser that the provider believes it has issued a certificate to the owner of the web site.

      A certificate provider can opt to issue three types of certificates, each requiring its own degree of vetting rigor. In order of increasing rigor (and naturally, cost) they are: Domain Validation, Organization Validation and Extended Validation.

      The Domain Validation certificate doesn’t provide sufficient identity guarantees to itsme. So, only the Organization Validation and Extended Validation certificates are supported. For example, using the Let’s Encrypt open certificate authority is not suffcient because it only provide standard Domain Validation certificates.

      Handling responses

      Whenever a partner is sending a request to the itsme OIDC endpoints he will get a response back. According to the OIDC protocol, and depending on the endpoint that was contacted, partners can get a

      • response where some parameters are added to the query component of the redirection URI using the application/x-www-form-urlencoded format, or
      • response displayed directly on our itsme® sign-in page ;
      • response using the application/json media type

      Alongside the type of response an HTTP status code is sent that shows whether the request was successful or not. If it was not, you can tell by the code and the message in the response what went wrong, why it went wrong and whether there is something the partner can do about it.

      A successful response

      An HTTP status 200 OK or 302 Found is issued whenever your request was a success. You see this type of response in our examples like the one where we successfully retrieve the Token Response :

      HTTP/1.1 200 OK
       Content-Type: application/json
      @@ -39,7 +39,7 @@
       		"birthdate": "2023-06-01T13:04:26Z",
       		"given_name": "2023-06-01T13:04:26Z"
       	}
      -
      • Requesting only the verificationDate will return nothing, as it only returns values for other requested attributes.

      • The validityTo metadata only has a value for BEeidSn and IDDocumentSN (because other attributes don’t have an expiry date). So validityTo will only return a value if BEeidSn and/or IDDocumentSN is also requested. Even if other attributes are requested, validityTo will not return a value for those other attributes.

      API reference

      itsme® Discovery Document

      • GET https://idp.[e2e/prd].itsme.services/v2/.well-known/openid-configuration

        To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

        Authorization, Token and userInfo Endpoints Supported claims ...
      • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/.well-known/openid-configuration

        To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

        Authorization, Token and userInfo Endpoints Supported claims ...

      Authorization Request

      • GET https://idp.[e2e/prd].itsme.services/v2/authorization

      • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/authorize

      Parameters

      client_id
      REQUIRED
      It identifies your application. This parameter value is generated during registration.
      response_type
      REQUIRED
      This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
      scope
      REQUIRED
      It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

      All scope values must be space-separated.

      The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
      service
      REQUIRED
      It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
      openid
      REQUIRED
      It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
      profile
      OPTIONAL
      Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

      If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
      email
      OPTIONAL
      Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

      If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
      address
      OPTIONAL
      Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

      If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
      phone
      OPTIONAL
      Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

      If requested, a value SHALL always be returned for the above claims.
      eid
      OPTIONAL
      Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

      If requested, a value SHALL always be returned for the above claims.
      redirect_uri
      REQUIRED
      It is the URL to which users are redirected once the authentication is complete.

      The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
      state
      Strongly RECOMMENDED
      Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
      nonce
      Strongly RECOMMENDED
      A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
      ui_locales
      OPTIONAL
      Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

      Possible values : fr nl de en
      display
      OPTIONAL
      Specify how the itsme® sign-in page should be displayed to the user. Currently, only the page value is supported but in the future we might support additional display modes like touch.
      acr_values
      OPTIONAL
      Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

      Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

      Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
      http://itsme.services/v2/
      claim/acr_basic
      It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
      http://itsme.services/v2/
      claim/acr_advanced
      It forces the user to use his itsme® code.
      claims
      OPTIONAL
      Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
      It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims - see example below.
      Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.

      Supported claims are listed below.
      name
      OPTIONAL
      Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

      If requested, a value SHALL always be returned for this claim.
      given_name
      OPTIONAL
      Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

      If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
      family_name
      OPTIONAL
      Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

      If requested, a value SHALL always be returned for this claim.
      birthdate
      OPTIONAL
      Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

      BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
      NL: A value SHALL always be returned for users with a Dutch ID document.
      LU: A value SHALL always be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/claim/birthdate_as_string
      OPTIONAL
      Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

      BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate claim: at least one of the 2 SHALL return a value.
      NL: A value SHALL NOT be returned for users with a Dutch ID document.
      LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
      gender
      OPTIONAL
      Returns user's gender. Possible values are : female male unknown n/a

      BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
      NL: A value MAY NOT be returned for users with a Dutch ID document.
      LU: A value SHALL always be returned for users with a Luxembourgish ID document.
      locale
      OPTIONAL
      Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

      If requested, a value MAY NOT be returned for this claim.
      picture
      OPTIONAL
      Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

      BE: A value MAY NOT be returned for users with a Belgian ID document.
      NL: A value SHALL always be returned for users with a Dutch ID document.
      LU: A value SHALL always be returned for users with a Luxembourgish ID document.

      Accessing this URL has to be done with your bearer token. Example:
      GET /v2/picture HTTP/1.1
      Host: idp.prd.itsme.services
      Authorization: Bearer SlAV32hkKG
      http://itsme.services/v2/
      claim/physical_person_photo
      OPTIONAL
      Returns user's ID picture, represented as a JSON Object containing these members:
      format: the MIME type
      value: the base64 encoded image.

      This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

      BE: A value MAY NOT be returned for users with a Belgian ID document.
      NL: A value SHALL always be returned for users with a Dutch ID document.
      LU: A value SHALL always be returned for users with a Luxembourgish ID document.
      email
      OPTIONAL
      Returns user's email address.

      If requested, a value MAY NOT be returned.
      email_verified
      OPTIONAL
      Returns true if the user's e-mail address is verified; otherwise false.

      Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

      If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
      phone_number
      OPTIONAL
      Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

      If requested, a value SHALL always be returned for this claim.
      phone_number_verified
      OPTIONAL
      Returns true if the user's phone number is verified; otherwise false.

      If requested, a value SHALL always be returned for this claim.
      Note: currently, all phone numbers are verified so this claims always returns true.
      address
      OPTIONAL
      Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

      BE: A value SHALL always be returned for users with a Belgian ID document.
      NL: A value SHALL NOT be returned for users with a Dutch ID document.
      LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/claim_citizenship
      OPTIONAL
      Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch or Lux ID documents this is represented in the ISO 3166-1 alpha-3 format.

      If requested, a value SHALL always be returned for this claim.
      http://itsme.services/v2/
      claim/claim_citizenship_as_iso
      OPTIONAL
      Returns user's nationality. The format is always ISO 3166-1 alpha-3.

      BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
      NL: A value SHALL always be returned for users with a Dutch ID document.
      LU: A value SHALL always be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/place_of_birth
      OPTIONAL
      Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

      BE: A value MAY NOT be returned for users with a Belgian ID document.
      NL: A value SHALL NOT be returned for users with a Dutch ID document.
      LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/BEeidSn
      OPTIONAL
      Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

      BE: A value SHALL always be returned for users with a Belgian ID document.
      NL: A value SHALL NOT be returned for users with a Dutch ID document.
      LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/claim_device
      OPTIONAL
      Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

      If requested, a value MAY NOT be returned for this claim.
      http://itsme.services/v2/
      claim/transaction_info
      OPTIONAL
      Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

      If requested, a value MAY NOT be returned for this claim.
      http://itsme.services/v2/
      claim/BENationalNumber
      OPTIONAL
      Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

      BE: A value SHALL always be returned for users with a Belgian ID document.
      NL: A value SHALL NOT be returned for users with a Dutch ID document.
      LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/validityFrom
      OPTIONAL
      This is a metadata.
      Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
      BE: A value MAY NOT be returned for users with a Belgian ID document.
      NL: A value SHALL NOT be returned for users with a Dutch ID document.
      LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/validityTo
      OPTIONAL
      This is a metadata.
      Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

      If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
      http://itsme.services/v2/
      claim/verificationDate
      OPTIONAL
      This is a metadata.
      Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

      BE: A value MAY NOT be returned for users with a Belgian ID document.
      NL: A value SHALL always be returned for users with a Dutch ID document.
      LU: A value SHALL always be returned for users with a Luxembourgish ID document.
      http://itsme.services/v2/
      claim/IDDocumentSN
      OPTIONAL
      Returns the ID document number, represented as a string. If requested, a value SHALL always be returned for this claim:
      BE: The BE eID number is a string with 12 digits in the form xxx-xxxxxxx-yy (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens.
      NL: A 9-chars string with letters at positions 1 and 2, letters or digits in positions 3 to 8 and a digit at position 9. The letter ‘O’ is not used in the NL document numbers. The digit ‘0’ (zero) MAY be used.
      LU: Format not documented.

      http://itsme.services/v2/
      claim/IDDocumentType
      OPTIONAL
      Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

      If requested, a value SHALL always be returned for this claim.
      http://itsme.services/v2/
      claim/IDIssuingCountry
      OPTIONAL
      This is a metadata.
      Returns the 3-letters iso code of the country that issued the identity document.

      If requested, a value SHALL always be returned for this claim.
      http://itsme.services/v2/
      claim/issuance_locality
      OPTIONAL
      This is a metadata.
      Returns the locality that issued the ID document used to create the itsme® account.

      If requested, a value MAY NOT be returned for this claim.
      http://itsme.services/v2/
      claim/app
      OPTIONAL
      Returns a JSON object with 3 members: appInstalledDate contains the date when the app was installed on the user's device, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. appName contains the name of the app and appRelease contains a string identifying the release (example: "4.9.1").
      This claim is intended to help partners detect fraudulent use cases.

      If requested, a value SHALL always be returned for this claim.
      http://itsme.services/v2/
      claim/account
      OPTIONAL
      Returns a JSON object with 3 members: activationDate contains the date when the account was last activated (enrolled or unblocked), represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. activationMechanism contains a string identifying the way this account was created. Possible values are "CARD_READER" (enrollment via a physical reading of the ID document chip), "CONTACT_LESS" (enrollment via a NFC reading of the ID document) or "ID_PROVIDER" (enrollment via a trusted partner, i.e. a bank).
      This claim is intended to help partners detect fraudulent use cases.

      If requested, a value SHALL always be returned for this claim.
      http://itsme.services/v2/
      claim/transaction_ip
      OPTIONAL
      Returns the IP address of the smartphone approving the transaction.
      This claim is intended to help partners detect fraudulent use cases.

      If requested, a value SHALL always be returned for this claim.
      request_uri
      OPTIONAL
      A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

      If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

      The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MUST contain the TCP port number 443. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
      request
      OPTIONAL
      It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

      If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
      code_challenge
      OPTIONAL
      A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
      code_challenge_method
      OPTIONAL
      Code verifier transformation method.

      It MUST be set to S256.

      Response

      302 application/x-www-form-urlencoded

      code
      An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

      Note : the code has a lifetime of 3 minutes.
      state
      The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.

      Example

      • Request

        GET /v2/authorization HTTP/1.1
        +
        • Requesting only the verificationDate will return nothing, as it only returns values for other requested attributes.

        • The validityTo metadata only has a value for BEeidSn and IDDocumentSN (because other attributes don’t have an expiry date). So validityTo will only return a value if BEeidSn and/or IDDocumentSN is also requested. Even if other attributes are requested, validityTo will not return a value for those other attributes.

        API reference

        itsme® Discovery Document

        • GET https://idp.[e2e/prd].itsme.services/v2/.well-known/openid-configuration

          To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

          Authorization, Token and userInfo Endpoints Supported claims ...
        • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/.well-known/openid-configuration

          To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

          Authorization, Token and userInfo Endpoints Supported claims ...

        Authorization Request

        • GET https://idp.[e2e/prd].itsme.services/v2/authorization

        • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/authorize

        Parameters

        client_id
        REQUIRED
        It identifies your application. This parameter value is generated during registration.
        response_type
        REQUIRED
        This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
        scope
        REQUIRED
        It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

        All scope values must be space-separated.

        The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
        service
        REQUIRED
        It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
        openid
        REQUIRED
        It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
        profile
        OPTIONAL
        Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

        If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
        email
        OPTIONAL
        Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

        If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
        address
        OPTIONAL
        Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

        If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
        phone
        OPTIONAL
        Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

        If requested, a value SHALL always be returned for the above claims.
        eid
        OPTIONAL
        Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

        If requested, a value SHALL always be returned for the above claims.
        redirect_uri
        REQUIRED
        It is the URL to which users are redirected once the authentication is complete.

        The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
        state
        Strongly RECOMMENDED
        Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
        nonce
        Strongly RECOMMENDED
        A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
        ui_locales
        OPTIONAL
        Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

        Possible values : fr nl de en
        display
        OPTIONAL
        Specify how the itsme® sign-in page should be displayed to the user. Currently, only the page value is supported but in the future we might support additional display modes like touch.
        acr_values
        OPTIONAL
        Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

        Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

        Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
        http://itsme.services/v2/
        claim/acr_basic
        It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
        http://itsme.services/v2/
        claim/acr_advanced
        It forces the user to use his itsme® code.
        claims
        OPTIONAL
        Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
        It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims - see example below.
        Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.

        Supported claims are listed below.
        name
        OPTIONAL
        Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

        If requested, a value SHALL always be returned for this claim.
        given_name
        OPTIONAL
        Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

        If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
        family_name
        OPTIONAL
        Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

        If requested, a value SHALL always be returned for this claim.
        birthdate
        OPTIONAL
        Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

        BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
        NL: A value SHALL always be returned for users with a Dutch ID document.
        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/claim/birthdate_as_string
        OPTIONAL
        Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

        BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate claim: at least one of the 2 SHALL return a value.
        NL: A value SHALL NOT be returned for users with a Dutch ID document.
        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
        gender
        OPTIONAL
        Returns user's gender. Possible values are : female male unknown n/a

        BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
        NL: A value MAY NOT be returned for users with a Dutch ID document.
        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
        locale
        OPTIONAL
        Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

        If requested, a value MAY NOT be returned for this claim.
        picture
        OPTIONAL
        Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

        BE: A value MAY NOT be returned for users with a Belgian ID document.
        NL: A value SHALL always be returned for users with a Dutch ID document.
        LU: A value SHALL always be returned for users with a Luxembourgish ID document.

        Accessing this URL has to be done with your bearer token. Example:
        GET /v2/picture HTTP/1.1
        Host: idp.prd.itsme.services
        Authorization: Bearer SlAV32hkKG
        http://itsme.services/v2/
        claim/physical_person_photo
        OPTIONAL
        Returns user's ID picture, represented as a JSON Object containing these members:
        format: the MIME type
        value: the base64 encoded image.

        This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

        BE: A value MAY NOT be returned for users with a Belgian ID document.
        NL: A value SHALL always be returned for users with a Dutch ID document.
        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
        email
        OPTIONAL
        Returns user's email address.

        If requested, a value MAY NOT be returned.
        email_verified
        OPTIONAL
        Returns true if the user's e-mail address is verified; otherwise false.

        Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

        If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
        phone_number
        OPTIONAL
        Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

        If requested, a value SHALL always be returned for this claim.
        phone_number_verified
        OPTIONAL
        Returns true if the user's phone number is verified; otherwise false.

        If requested, a value SHALL always be returned for this claim.
        Note: currently, all phone numbers are verified so this claims always returns true.
        address
        OPTIONAL
        Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

        BE: A value SHALL always be returned for users with a Belgian ID document.
        NL: A value SHALL NOT be returned for users with a Dutch ID document.
        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/claim_citizenship
        OPTIONAL
        Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch or Lux ID documents this is represented in the ISO 3166-1 alpha-3 format.

        If requested, a value SHALL always be returned for this claim.
        http://itsme.services/v2/
        claim/claim_citizenship_as_iso
        OPTIONAL
        Returns user's nationality. The format is always ISO 3166-1 alpha-3.

        BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
        NL: A value SHALL always be returned for users with a Dutch ID document.
        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/place_of_birth
        OPTIONAL
        Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

        BE: A value MAY NOT be returned for users with a Belgian ID document.
        NL: A value SHALL NOT be returned for users with a Dutch ID document.
        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/BEeidSn
        OPTIONAL
        Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

        BE: A value SHALL always be returned for users with a Belgian ID document.
        NL: A value SHALL NOT be returned for users with a Dutch ID document.
        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/claim_device
        OPTIONAL
        Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

        If requested, a value MAY NOT be returned for this claim.
        http://itsme.services/v2/
        claim/transaction_info
        OPTIONAL
        Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

        If requested, a value MAY NOT be returned for this claim.
        http://itsme.services/v2/
        claim/BENationalNumber
        OPTIONAL
        Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

        BE: A value SHALL always be returned for users with a Belgian ID document.
        NL: A value SHALL NOT be returned for users with a Dutch ID document.
        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/validityFrom
        OPTIONAL
        This is a metadata.
        Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
        BE: A value MAY NOT be returned for users with a Belgian ID document.
        NL: A value SHALL NOT be returned for users with a Dutch ID document.
        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/validityTo
        OPTIONAL
        This is a metadata.
        Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

        If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
        http://itsme.services/v2/
        claim/verificationDate
        OPTIONAL
        This is a metadata.
        Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

        BE: A value MAY NOT be returned for users with a Belgian ID document.
        NL: A value SHALL always be returned for users with a Dutch ID document.
        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
        http://itsme.services/v2/
        claim/IDDocumentSN
        OPTIONAL
        Returns the ID document number, represented as a string. If requested, a value SHALL always be returned for this claim:
        BE: The BE eID number is a string with 12 digits in the form xxx-xxxxxxx-yy (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens.
        NL: A 9-chars string with letters at positions 1 and 2, letters or digits in positions 3 to 8 and a digit at position 9. The letter ‘O’ is not used in the NL document numbers. The digit ‘0’ (zero) MAY be used.
        LU: Format not documented.

        http://itsme.services/v2/
        claim/IDDocumentType
        OPTIONAL
        Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

        If requested, a value SHALL always be returned for this claim.
        http://itsme.services/v2/
        claim/IDIssuingCountry
        OPTIONAL
        This is a metadata.
        Returns the 3-letters iso code of the country that issued the identity document.

        If requested, a value SHALL always be returned for this claim.
        http://itsme.services/v2/
        claim/issuance_locality
        OPTIONAL
        This is a metadata.
        Returns the locality that issued the ID document used to create the itsme® account.

        If requested, a value MAY NOT be returned for this claim.
        http://itsme.services/v2/
        claim/app
        OPTIONAL
        Returns a JSON object with 3 members: appInstalledDate contains the date when the app was installed on the user's device, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. appName contains the name of the app and appRelease contains a string identifying the release (example: "4.9.1").
        This claim is intended to help partners detect fraudulent use cases.

        If requested, a value SHALL always be returned for this claim.
        http://itsme.services/v2/
        claim/account
        OPTIONAL
        Returns a JSON object with 3 members: activationDate contains the date when the account was last activated (enrolled or unblocked), represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. activationMechanism contains a string identifying the way this account was created. Possible values are "CARD_READER" (enrollment via a physical reading of the ID document chip), "CONTACT_LESS" (enrollment via a NFC reading of the ID document) or "ID_PROVIDER" (enrollment via a trusted partner, i.e. a bank).
        This claim is intended to help partners detect fraudulent use cases.

        If requested, a value SHALL always be returned for this claim.
        http://itsme.services/v2/
        claim/transaction_ip
        OPTIONAL
        Returns the IP address of the smartphone approving the transaction.
        This claim is intended to help partners detect fraudulent use cases.

        If requested, a value SHALL always be returned for this claim.
        request_uri
        OPTIONAL
        A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

        If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

        The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MUST contain the TCP port number 443. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
        request
        OPTIONAL
        It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

        If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
        code_challenge
        OPTIONAL
        A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
        code_challenge_method
        OPTIONAL
        Code verifier transformation method.

        It MUST be set to S256.

        Response

        302 application/x-www-form-urlencoded

        code
        An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

        Note : the code has a lifetime of 3 minutes.
        state
        The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.

        Example

        • Request

          GET /v2/authorization HTTP/1.1
           Host: server.example.com
           
           response_type=code
          @@ -91,7 +91,7 @@
           Location: https://client.example.org/cb?
             code=SplxlOBeZQQYbYS6WxSbIA
             &state=af0ifjsldkj
          -

        Token Request

        • POST https://idp.[e2e/prd].itsme.services/v2/token

          To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the public- and private-key pair method.

          Parameters

          grant_type
          REQUIRED
          Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID token and access token.
          code
          REQUIRED
          The intermediate opaque credential received in the Authorization Response.
          redirect_uri
          REQUIRED
          It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
          code_verifier
          OPTIONAL
          High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.
          client_assertion_type
          REQUIRED
          Specifies the type of assertion. Set this to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
          client_assertion
          REQUIRED
          Is a set of identity and security information, in the form of a JWT, used as an authentication method. To ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code, the JWT MUST be signed, and MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

          The JWT contains the following claims.
          iss
          REQUIRED
          The issuer of the token. This value MUST be the same as the client_id.
          sub
          REQUIRED
          The subject of the token. This value MUST be the same as the client_id.
          aud
          REQUIRED
          The full URL of the resource you're using the JWT to authenticate to. Set this to https://idp.[e2e/prd].itsme.services/v2/token.
          jti
          REQUIRED
          An unique identifier for the token, containing maximum 255 characters.
          exp
          REQUIRED
          The expiration time of the token in seconds since January 1, 1970 UTC.
          iat
          OPTIONAL
          The time at which the JWT was issued.

          Response

          200 application/json

          access_token
          Allows an application to retrieve consented user information from the UserInfo Endpoint.
          token_type
          Provides your application with the information required to successfully utilize the access token. Returned value is Bearer..
          id_token
          A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).
        • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/token

          To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the secret key method.

          Parameters

          grant_type
          REQUIRED
          Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID koken and access token.
          client_id
          REQUIRED
          It identifies your application. This parameter value is generated during registration.
          code
          REQUIRED
          The intermediate opaque credential received in the Authorization Response.
          redirect_uri
          REQUIRED
          It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
          client_secret
          REQUIRED
          Contains the a key you reveiced when registering your application. This ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code.
          code_verifier
          OPTIONAL
          High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.

          Response

          200 application/json

          access_token
          Allows an application to retrieve consented user information from the UserInfo Endpoint.
          token_type
          Provides your application with the information required to successfully utilize the access token. Returned value is Bearer.
          id_token
          A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).

        Example

        • Request

          POST /token HTTP/1.1
          +

        Token Request

        • POST https://idp.[e2e/prd].itsme.services/v2/token

          To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the public- and private-key pair method.

          Parameters

          grant_type
          REQUIRED
          Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID token and access token.
          code
          REQUIRED
          The intermediate opaque credential received in the Authorization Response.
          redirect_uri
          REQUIRED
          It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
          code_verifier
          OPTIONAL
          High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.
          client_assertion_type
          REQUIRED
          Specifies the type of assertion. Set this to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
          client_assertion
          REQUIRED
          Is a set of identity and security information, in the form of a JWT, used as an authentication method. To ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code, the JWT MUST be signed, and MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

          The JWT contains the following claims.
          iss
          REQUIRED
          The issuer of the token. This value MUST be the same as the client_id.
          sub
          REQUIRED
          The subject of the token. This value MUST be the same as the client_id.
          aud
          REQUIRED
          The full URL of the resource you're using the JWT to authenticate to. Set this to https://idp.[e2e/prd].itsme.services/v2/token.
          jti
          REQUIRED
          An unique identifier for the token, containing maximum 255 characters.
          exp
          REQUIRED
          The expiration time of the token in seconds since January 1, 1970 UTC.
          iat
          OPTIONAL
          The time at which the JWT was issued.

          Response

          200 application/json

          access_token
          Allows an application to retrieve consented user information from the UserInfo Endpoint.
          token_type
          Provides your application with the information required to successfully utilize the access token. Returned value is Bearer..
          id_token
          A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).
        • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/token

          To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the secret key method.

          Parameters

          grant_type
          REQUIRED
          Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID koken and access token.
          client_id
          REQUIRED
          It identifies your application. This parameter value is generated during registration.
          code
          REQUIRED
          The intermediate opaque credential received in the Authorization Response.
          redirect_uri
          REQUIRED
          It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
          client_secret
          REQUIRED
          Contains the a key you reveiced when registering your application. This ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code.
          code_verifier
          OPTIONAL
          High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.

          Response

          200 application/json

          access_token
          Allows an application to retrieve consented user information from the UserInfo Endpoint.
          token_type
          Provides your application with the information required to successfully utilize the access token. Returned value is Bearer.
          id_token
          A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).

        Example

        • Request

          POST /token HTTP/1.1
           Host: openid.c2id.com
           Content-Type: application/x-www-form-urlencoded
           
          @@ -172,7 +172,7 @@
           	"exp": 1699538407,
           	"iat": 1699538107
           }
          -

          UserInfo Request

          • GET https://idp.[e2e/prd].itsme.services/v2/userinfo

            The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

            This is illustrated in the example below.

            Response

            200 application/json

            The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

          • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/userinfo

            The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

            This is illustrated in the example below.

            Response

            200 application/json

            The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

          Example

          Request

          GET /userinfo HTTP/1.1
          +

          UserInfo Request

          • GET https://idp.[e2e/prd].itsme.services/v2/userinfo

            The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

            This is illustrated in the example below.

            Response

            200 application/json

            The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

          • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/userinfo

            The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

            This is illustrated in the example below.

            Response

            200 application/json

            The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

          Example

          Request

          GET /userinfo HTTP/1.1
           Host: server.example.com
           Authorization: Bearer SlAV32hkKG
           

          Response

          This is an response example containing all possible claims for a Belgian account:

          HTTP/1.1 200 OK
          @@ -275,7 +275,7 @@
           	"exp": 1681314490,
           	"iat": 1681314190
           }
          -

          Revoke Request

          • Not applicable.

          • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/revoke

            The Revocation Endpoint enables your application to notify itsme® that a previously obtained access token is no longer needed and MUST be revoked.

            Parameters

            token
            REQUIRED
            The access_token previously obtained that you want to revoke.
            token_type_hint
            OPTIONAL
            A hint about the type of the token submitted for revocation. You MAY pass this parameter in order to help itsme® to optimize the token lookup. If the server is unable to locate the token using the given hint, it MUST extend its search across all of its supported token types. If used, this is set to access_token because itsme® API don't support refresh tokens.

            Response

            200

            itsme® responds with HTTP status code 200 if the token has been revoked successfully or if the client submitted an invalid token.

          Example

          • Not applicable.

          • Request

            POST /connect/revoke HTTP/1.1
            +

            Revoke Request

            • Not applicable.

            • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/revoke

              The Revocation Endpoint enables your application to notify itsme® that a previously obtained access token is no longer needed and MUST be revoked.

              Parameters

              token
              REQUIRED
              The access_token previously obtained that you want to revoke.
              token_type_hint
              OPTIONAL
              A hint about the type of the token submitted for revocation. You MAY pass this parameter in order to help itsme® to optimize the token lookup. If the server is unable to locate the token using the given hint, it MUST extend its search across all of its supported token types. If used, this is set to access_token because itsme® API don't support refresh tokens.

              Response

              200

              itsme® responds with HTTP status code 200 if the token has been revoked successfully or if the client submitted an invalid token.

            Example

            • Not applicable.

            • Request

              POST /connect/revoke HTTP/1.1
               Host: server.example.com
               Content-Type: application/x-www-form-urlencoded
               Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
              diff --git a/aws/index.html b/aws/index.html
              index 327569d86..be62081d8 100644
              --- a/aws/index.html
              +++ b/aws/index.html
              @@ -1 +1 @@
              -     AWS Cognito - itsme OIDC Documentation       AWS Cognito | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

              Prerequisites

              • AWS account and/or relevant subscription
              • Your Client ID, also known as Partner code, provided by itsme®.
              • Your Service code provided by itsme®.
              • Client secret provided by itsme®
              • redirect_uri you will be redirecting the user to (please, provide it to onboarding@itsme-id.com).

              Configuration between AWS and itsme®

              is exhaustive, please, refer to that during configuration as well as to itsme® official documentation.

              Reference

              + AWS Cognito - itsme OIDC Documentation AWS Cognito | itsme OIDC Documentation Link Search Menu Expand Document

              Prerequisites

              • AWS account and/or relevant subscription
              • Your Client ID, also known as Partner code, provided by itsme®.
              • Your Service code provided by itsme®.
              • Client secret provided by itsme®
              • redirect_uri you will be redirecting the user to (please, provide it to onboarding@itsme-id.com).

              Configuration between AWS and itsme®

              is exhaustive, please, refer to that during configuration as well as to itsme® official documentation.

              Reference

              diff --git a/azureB2C/index.html b/azureB2C/index.html index 4cdaa2f4f..cad55d727 100644 --- a/azureB2C/index.html +++ b/azureB2C/index.html @@ -1,4 +1,4 @@ - Azure B2C - itsme OIDC Documentation Azure B2C | itsme OIDC Documentation Link Search Menu Expand Document

              Prerequisites

              • Azure B2C account and/or relevant subscription
              • Your Client ID, also known as Partner code, provided by itsme®.
              • Your Service code provided by itsme®.
              • Client secret provided by itsme®
              • redirect_uri you will be redirecting the user to. In Azure B2C, it is in the following format (please, provide it to onboarding@itsme-id.com):
                https://{partnerAzureB2C-tenant-name}.b2clogin.com/{partnerAzureB2C-tenant-name}/oauth2/authresp
                +     Azure B2C - itsme OIDC Documentation       Azure B2C | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

                Prerequisites

                • Azure B2C account and/or relevant subscription
                • Your Client ID, also known as Partner code, provided by itsme®.
                • Your Service code provided by itsme®.
                • Client secret provided by itsme®
                • redirect_uri you will be redirecting the user to. In Azure B2C, it is in the following format (please, provide it to onboarding@itsme-id.com):
                  https://{partnerAzureB2C-tenant-name}.b2clogin.com/{partnerAzureB2C-tenant-name}/oauth2/authresp
                   https://{partnerAzureB2C-tenant-name}.b2clogin.com/{partnerAzureB2C-tenant-name}.onmicrosoft.com/oauth2/authresp
                   

                Configuration between Azure B2C and itsme®

                Whether your set-up is via user flow (normally, via graphical user-interface (GUI) on Azure portal) or Identity Experience Framework (IEF), custom policies, configured via .xml files, will depend what ID data you wish (and entitled by commercial & legal agreements) to receive.

                As of 2023, Azure B2C technical limitation is no possibility to process JSON objects, only strings. Please, cosult to see what claims returned by itsme® are strings or JSON object data type. User flow is limited to sub, names & email. While IEF will allow you to process the rest of ID Data listed above in data type string.

                User Flows

                User flows is a portal (GUI) configurable flow, which is based on built-in user attributes (values collected on sign up) and application claims, which are values about the user, returned to the application in the token. One can create custom attributes, but Azure B2C does not process any claims from itsme®, except the ones mapped during general idp setup (idp claims mapping), i.e. sub, given_name, family_name, email. Only those were returned consistently during testing of 2023.

                End-user will see in the app request to approve all data which is mentioned on the scope, e.g. if full scope defined => all data will be displayed to approve, but Azure B2C will process and return only mapped claims, i.e. sub, given_name, family_name, emails (returned as string collection).

                Identity Experience Framework (IEF) or custom policy

                IEF is advanced method to configure Azure B2C via .xml files. Due to Azure B2C limitations, JSON Objects returned by itsme® can not be processed or transformed by Azure B2C, thus one could ask & receive data which is returned as strings only.

                IEF configuration to retrieve custom OIDC claims (string or boolean data type)

                Microsoft has elaborate documentation custom policy definition and how to work with . Below we attempt to provide guidance from partner perspective to smooth the configuration flow. We advise however always fall back to Azure B2C official documentation.

                Prerequisites
                • An Azure B2C Tenant
                • Your itsme® provided ClientID aka PartnerCode
                • Your itsme® provided ServiceCode
                • Your client secret for your itsme® account

                Getting started with Custom Policies

                Add Signing and Encryption keys

                Open the B2C tenant and, under Policies, select Identity Experience Framework.

                Create the signing key
                1. Select Policy Keys and then select Add.
                2. For Options, choose Generate.
                3. In Name, enter TokenSigningKeyContainer. The prefix B2C_1A_ is added automatically.
                4. For Key type, select RSA.
                5. For Key usage, select Signature.
                6. Select Create.
                Create the encryption key
                1. Select Policy Keys and then select Add.
                2. For Options, choose Generate.
                3. In Name, enter TokenEncryptionKeyContainer. The prefix B2C_1A_ is added automatically.
                4. For Key type, select RSA.
                5. For Key usage, select Encryption.
                6. Select Create.
                Register Identity Experience Framework applications
                1. Open the B2C tenant and select under Manage App registrations.
                2. Select App registrations, and then select New registration.
                3. For Name, enter IdentityExperienceFramework.
                4. Under Supported account types, select Accounts in this organizational directory only.
                5. Under Redirect URI, select Web, and then enter https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com, where your-tenant-name is your Azure AD B2C tenant domain name.
                6. Under Permissions, select the Grant admin consent to openid and offline_access permissions check box.
                7. Select Register.
                8. Record the Application (client) ID for use in a later step.

                Next, expose the API by adding a scope:

                1. Under Manage, select Expose an API.
                2. Select Add a scope, then select Save and continue to accept the default application ID URI.
                3. Enter the following values to create a scope that allows custom policy execution in your Azure AD B2C tenant:
                  • Scope name: user_impersonation
                  • Admin consent display name: Access IdentityExperienceFramework
                  • Admin consent description: Allow the application to access IdentityExperienceFramework on behalf of the signed-in user.
                4. Select Add scope
                Register the ProxyIdentityExperienceFramework application

                (cf. )

                1. Open the B2C tenant and select under Manage App registrations.
                2. Select App registrations (Preview), and then select New registration.
                3. For Name, enter ProxyIdentityExperienceFramework.
                4. Under Supported account types, select Accounts in this organizational directory only.
                5. Under Redirect URI, use the drop-down to select Public client/native (mobile & desktop).
                6. For Redirect URI, enter myapp://auth.
                7. Under Permissions, select the Grant admin consent to openid and offline_access permissions check box.
                8. Select Register.
                9. Record the Application (client) ID for use in a later step.

                Next, specify that the application should be treated as a public client:

                1. Under Manage, select Authentication.
                2. Select Try out the new experience (if shown).
                3. Under Advanced settings, enable Treat application as a public client (select Yes). Ensure that ”allowPublicClient”: true is set in the application manifest.
                4. Select Save.

                Now, grant permissions to the API scope you exposed earlier in the IdentityExperienceFramework registration:

                1. Under Manage, select API permissions.
                2. Under Configured permissions, select Add a permission.
                3. Select the My APIs tab, then select the IdentityExperienceFramework application.
                4. Under Permission, select the user_impersonation scope that you defined earlier.
                5. Select Add permissions. As directed, wait a few minutes before proceeding to the next step.
                6. Select Grant admin consent for (your tenant name).
                7. Select your currently signed-in administrator account, or sign in with an account in your Azure AD B2C tenant that’s been assigned at least the Cloud application administrator role.
                8. Select Accept.
                9. Select Refresh, and then verify that “Granted for …” appears under Status for the scopes - offline_access, openid and user_impersonation. It might take a few minutes for the permissions to propagate.
                App Registration
                1. Open the B2C tenant and select under Manage select App Registrations
                2. New registration
                3. Support account type: Account in this organizational directory only
                4. Redirect URL: the redirect URL to your app.
                  • For testing purposes, you can use https://jwt.ms
                5. click on Register
                  • For testing purposes, go to Authentication and select in the section implicit grant “Access Tokens” and “ID Tokens”.
                Client Secret Registration
                1. Open the B2C tenant and select under Policies Identity Experience Framework.
                2. Select Policy keys and then select Add.
                3. For Options, choose Manual.
                4. Enter the name “itsmeClientSecret”
                5. For Key usage, select Signature.
                6. Select Create.

                Edit the Custom Policy Starter Pack

                1. Download the starter pack:

                git clone https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack

                1. Edit the files from the “SocialAndLocalAccounts” folder in the downloaded starter pack
                2. In all XML files in the starter pack, replace “yourtenant” with the name of your tenant
                3. In TrustFrameworkExtensions.xml, fill in the AppID of the two Identity Experience Framework applications
                  • replace “ProxyIdentityExperienceFrameworkAppId”
                  • replace “IdentityExperienceFrameworkAppId”
                  • remove the “” with the DisplayName ‘Facebook’
                <Metadata>
                  <Item Key="client_id">ProxyIdentityExperienceFrameworkAppID</Item>
                diff --git a/confirmation/index.html b/confirmation/index.html
                index 33f26d291..c37122344 100644
                --- a/confirmation/index.html
                +++ b/confirmation/index.html
                @@ -1,4 +1,4 @@
                -     Confirmation API - itsme OIDC Documentation       Confirmation API | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

                Overview

                itsme® API is based on the Authorization Code Flow of OpenID Connect 1.0. The API can be used to verify your end-users’ identity and obtain some information about them. For the exact user data that can be requested, please see the Authorization Request parameters.

                The diagram below describes the Confirmation process and how your systems should integrate with itsme® :

                Sequence diagram describing the OpenID flow

                To get to this result please make sure you

                1. add itsme® button to your front-end page so the user can indicate he wishes to authenticate with itsme® : itsme® button specifications.
                2. create the Authorization Request to authenticate the User. This request will redirect the user to the itsme® app. itsme® will then authenticates the user by asking him
                  • to enter his phone number on the itsme® sign-in page
                  • authorize the release of some information to your application
                  • to provide his credentials (itsme® code, fingerprint or FaceID)

                  It is also in this Authorization Request that you will be able to request claims about the user and the Confirmation event.
                3. collect the Authorization Code once the user has been authenticated and redirected by itsme® to your mobile or web application.
                4. exchange the Authorization Code for an ID token (e.g. identifying the user) and an Access Token.
                5. Obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint if the required claims are not returned in the ID token.
                6. Confirm the success of the operation and display a success message.

                Onboarding

                To make use of our services, you will need to contact our Customer Care team at onboarding@itsme-id.com. Based on your requirements, they will configure for you a new partner in our database. You will receive the clientID corresponding to this partner, that you will need to include in your Authorization Request.

                Each partner can contain multiple “services”. Each service should correspond to one user flow at your side and can be of type Authentication, Identification or Confirmation. The service code will also be required in your Authorization Request.

                For each service, you will have to provide one or a few “redirect_uri”, which are the landing page(s) where the end user will be sent after authenticating with itsme. Only the URIs whitelisted in a service will be allowed in your Authorization Request, so they have to be fully determined before you can use the service. This whitelisting works on an “exact match” basis, including the full (case sensitive) path and query string so please communicate the exact string you are planning to use in your Authorization Request.

                Guides

                Generate itsme® button

                First, you will need to create a button to allow your users to authenticate with itsme®. Check the Button design guide before you start the integration.

                Upon clicking this button, the user will be redirected to our Front-End. itsme® then take care of their authentication.

                Securing the exchange of information

                To protect the exchange of sensitive information and ensure the requested information gets issued to a legitimate application and not some other party, the OpenID Connect protocol uses JSON Web Token (JWT) which can be signed and/or encrypted. Among the methods described in OpenID specification, itsme® supports 2 authentication methods to secure communications between your backend and itsme®:

                • "Private key JWT" is based on a public/private key pair (asymmetric encryption). It is therefore the most secure option
                • "Client secret" is based on a shared Secret key (symmetric encryption). It can be easier to implement in some cases

                Public-private key pair and JWKSet URI

                This method uses a pair of keys (1 public, 1 private) to encrypt and decrypt senders’ and recipients’ sensitive data. It is also known as public-key cryptography or asymetric encryption.

                You can retrieve the itsme® JWK Set from the URI mentioned as jwks_uri in our itsme® Discovery document.

                Secret key method

                Secret key cryptography method uses the same secret key to encrypt and decrypt sensitive information. This approach is the inverse of public- and private-key encryption.

                This method requires the exchange of a static secret to be held by both the sender and the data receiver. The secret value will be provided by itsme® when registering your project.

                Key rotation procedure

                for public-private key pair and JWKSet URI

                itsme® backend has cache mechanism in place, which is sporadic (from 30min to 24h). During this time, we will keep on using old keys.

                Rotating signing key:

                • Add the new key to JWK set, with a new “kid”
                • Start using the new key to sign JWTs
                • When the flow is validated with the new key, remove the old one from the JWK set

                Rotating encryption key:

                • Replace the old key with the new one in JWK set, but still support old and new keys in decryption process
                • Wait 24h (or wait for “max-age” amount of time, if specified)
                • Decommission the old key completely

                Changing the key could come along with changing the jwkset url. If that is the case, communicate new available jwkset url to onboarding@itsme-id.com. It is not be possible to be perfectly in sync, a few failed flows should be expected in the lapse of time between jwkset url update and the key update at the partner’s side. Smoother way would be:

                • Copy the old jwkSet on the new URL
                • the URL is communicated & registered by itsme®
                • Rotate the keys in the jwkSet on the new URL as per rotating keys info above

                for secret key method

                Please, reach out to onboarding@itsme-id.com in case the secret key should be rotated.

                PKCE-enhanced flow

                Whatever the chosen authentication method, itsme® also supports an extra security extension named Proof of Key for Code Exchange (PKCE). This additionnal layer of security is intended to mitigate some Authorization Code interception attacks. For this mechanism to achieve its full potential, PKCE has to be made mandatory in your flow, which is an option we can enable for you (strongly recommended). Please ask our onboarding team to do so when registering your project.

                PKCE implies choosing a random string, named code_verifier, and then generating a SHA256 hash of that string, named code_challenge. The code_challenge has to be sent along with the Authorization Request, while the code_verifier must be sent with the Token Request, allowing our backend to make sure both requests are issued by the same source.

                code_challenge can then be obtained via this kind of instructions:

                var hash = code_verifier.createHash('sha256');
                +     Confirmation API - itsme OIDC Documentation       Confirmation API | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

                Overview

                itsme® API is based on the Authorization Code Flow of OpenID Connect 1.0. The API can be used to verify your end-users’ identity and obtain some information about them. For the exact user data that can be requested, please see the Authorization Request parameters.

                The diagram below describes the Confirmation process and how your systems should integrate with itsme® :

                Sequence diagram describing the OpenID flow

                To get to this result please make sure you

                1. add itsme® button to your front-end page so the user can indicate he wishes to authenticate with itsme® : itsme® button specifications.
                2. create the Authorization Request to authenticate the User. This request will redirect the user to the itsme® app. itsme® will then authenticates the user by asking him
                  • to enter his phone number on the itsme® sign-in page
                  • authorize the release of some information to your application
                  • to provide his credentials (itsme® code, fingerprint or FaceID)

                  It is also in this Authorization Request that you will be able to request claims about the user and the Confirmation event.
                3. collect the Authorization Code once the user has been authenticated and redirected by itsme® to your mobile or web application.
                4. exchange the Authorization Code for an ID token (e.g. identifying the user) and an Access Token.
                5. Obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint if the required claims are not returned in the ID token.
                6. Confirm the success of the operation and display a success message.

                Onboarding

                To make use of our services, you will need to contact our Customer Care team at onboarding@itsme-id.com. Based on your requirements, they will configure for you a new partner in our database. You will receive the clientID corresponding to this partner, that you will need to include in your Authorization Request.

                Each partner can contain multiple “services”. Each service should correspond to one user flow at your side and can be of type Authentication, Identification or Confirmation. The service code will also be required in your Authorization Request.

                For each service, you will have to provide one or a few “redirect_uri”, which are the landing page(s) where the end user will be sent after authenticating with itsme. Only the URIs whitelisted in a service will be allowed in your Authorization Request, so they have to be fully determined before you can use the service. This whitelisting works on an “exact match” basis, including the full (case sensitive) path and query string so please communicate the exact string you are planning to use in your Authorization Request.

                Guides

                Generate itsme® button

                First, you will need to create a button to allow your users to authenticate with itsme®. Check the Button design guide before you start the integration.

                Upon clicking this button, the user will be redirected to our Front-End. itsme® then take care of their authentication.

                Securing the exchange of information

                To protect the exchange of sensitive information and ensure the requested information gets issued to a legitimate application and not some other party, the OpenID Connect protocol uses JSON Web Token (JWT) which can be signed and/or encrypted. Among the methods described in OpenID specification, itsme® supports 2 authentication methods to secure communications between your backend and itsme®:

                • "Private key JWT" is based on a public/private key pair (asymmetric encryption). It is therefore the most secure option
                • "Client secret" is based on a shared Secret key (symmetric encryption). It can be easier to implement in some cases

                Public-private key pair and JWKSet URI

                This method uses a pair of keys (1 public, 1 private) to encrypt and decrypt senders’ and recipients’ sensitive data. It is also known as public-key cryptography or asymetric encryption.

                You can retrieve the itsme® JWK Set from the URI mentioned as jwks_uri in our itsme® Discovery document.

                Secret key method

                Secret key cryptography method uses the same secret key to encrypt and decrypt sensitive information. This approach is the inverse of public- and private-key encryption.

                This method requires the exchange of a static secret to be held by both the sender and the data receiver. The secret value will be provided by itsme® when registering your project.

                Key rotation procedure

                for public-private key pair and JWKSet URI

                itsme® backend has cache mechanism in place, which is sporadic (from 30min to 24h). During this time, we will keep on using old keys.

                Rotating signing key:

                • Add the new key to JWK set, with a new “kid”
                • Start using the new key to sign JWTs
                • When the flow is validated with the new key, remove the old one from the JWK set

                Rotating encryption key:

                • Replace the old key with the new one in JWK set, but still support old and new keys in decryption process
                • Wait 24h (or wait for “max-age” amount of time, if specified)
                • Decommission the old key completely

                Changing the key could come along with changing the jwkset url. If that is the case, communicate new available jwkset url to onboarding@itsme-id.com. It is not be possible to be perfectly in sync, a few failed flows should be expected in the lapse of time between jwkset url update and the key update at the partner’s side. Smoother way would be:

                • Copy the old jwkSet on the new URL
                • the URL is communicated & registered by itsme®
                • Rotate the keys in the jwkSet on the new URL as per rotating keys info above

                for secret key method

                Please, reach out to onboarding@itsme-id.com in case the secret key should be rotated.

                PKCE-enhanced flow

                Whatever the chosen authentication method, itsme® also supports an extra security extension named Proof of Key for Code Exchange (PKCE). This additionnal layer of security is intended to mitigate some Authorization Code interception attacks. For this mechanism to achieve its full potential, PKCE has to be made mandatory in your flow, which is an option we can enable for you (strongly recommended). Please ask our onboarding team to do so when registering your project.

                PKCE implies choosing a random string, named code_verifier, and then generating a SHA256 hash of that string, named code_challenge. The code_challenge has to be sent along with the Authorization Request, while the code_verifier must be sent with the Token Request, allowing our backend to make sure both requests are issued by the same source.

                code_challenge can then be obtained via this kind of instructions:

                var hash = code_verifier.createHash('sha256');
                 var code_challenge = base64url.encode(hash);
                 

                Signing, encrypting and decoding JWTs

                Libraries implementing JWT and the JOSE specs JWS, JWE, JWK, and JWA are listed here. For testing purposes only, we could advise the use of https://mkjwk.org/ for JWK generation and https://mkjose.org/ for payload check => these are 2 open-source tools which will help you visualize JWK mechanisms, client assertion construct. Please DO NOT generate production private keys on any website. Rather opt for the relevant SDK library mentioned here.

                Certificates and website security

                itsme® requires https connections to guarantee security. With the https protocol, a web site operator obtains a certificate by applying to a certificate authority with a certificate signing request. The certificate request is an electronic document that contains the web site name, company information and the public key. The certificate provider signs the request, thus producing a public certificate. During web browsing, this public certificate is served to any web browser that connects to the web site and proves to the web browser that the provider believes it has issued a certificate to the owner of the web site.

                A certificate provider can opt to issue three types of certificates, each requiring its own degree of vetting rigor. In order of increasing rigor (and naturally, cost) they are: Domain Validation, Organization Validation and Extended Validation.

                The Domain Validation certificate doesn’t provide sufficient identity guarantees to itsme. So, only the Organization Validation and Extended Validation certificates are supported. For example, using the Let’s Encrypt open certificate authority is not suffcient because it only provide standard Domain Validation certificates.

                Handling responses

                Whenever a partner is sending a request to the itsme OIDC endpoints he will get a response back. According to the OIDC protocol, and depending on the endpoint that was contacted, partners can get a

                • response where some parameters are added to the query component of the redirection URI using the application/x-www-form-urlencoded format, or
                • response displayed directly on our itsme® sign-in page ;
                • response using the application/json media type

                Alongside the type of response an HTTP status code is sent that shows whether the request was successful or not. If it was not, you can tell by the code and the message in the response what went wrong, why it went wrong and whether there is something the partner can do about it.

                A successful response

                An HTTP status 200 OK or 302 Found is issued whenever your request was a success. You see this type of response in our examples like the one where we successfully retrieve the Token Response :

                HTTP/1.1 200 OK
                 Content-Type: application/json
                @@ -39,7 +39,7 @@
                 		"birthdate": "2023-06-01T13:04:26Z",
                 		"given_name": "2023-06-01T13:04:26Z"
                 	}
                -
                • Requesting only the verificationDate will return nothing, as it only returns values for other requested attributes.

                • The validityTo metadata only has a value for BEeidSn and IDDocumentSN (because other attributes don’t have an expiry date). So validityTo will only return a value if BEeidSn and/or IDDocumentSN is also requested. Even if other attributes are requested, validityTo will not return a value for those other attributes.

                API reference

                itsme® Discovery Document

                • GET https://idp.[e2e/prd].itsme.services/v2/.well-known/openid-configuration

                  To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                  Authorization, Token and userInfo Endpoints Supported claims ...
                • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/.well-known/openid-configuration

                  To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                  Authorization, Token and userInfo Endpoints Supported claims ...

                Authorization Request

                • GET https://idp.[e2e/prd].itsme.services/v2/authorization

                  Parameters

                  client_id
                  REQUIRED
                  It identifies your application. This parameter value is generated during registration.
                  response_type
                  REQUIRED
                  This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
                  scope
                  REQUIRED
                  It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

                  All scope values must be space-separated.

                  The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
                  service
                  REQUIRED
                  It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
                  openid
                  REQUIRED
                  It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
                  profile
                  OPTIONAL
                  Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

                  If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
                  email
                  OPTIONAL
                  Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

                  If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
                  address
                  OPTIONAL
                  Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

                  If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
                  phone
                  OPTIONAL
                  Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

                  If requested, a value SHALL always be returned for the above claims.
                  eid
                  OPTIONAL
                  Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

                  If requested, a value SHALL always be returned for the above claims.
                  redirect_uri
                  REQUIRED
                  It is the URL to which users are redirected once the authentication is complete.

                  The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
                  state
                  Strongly RECOMMENDED
                  Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
                  nonce
                  Strongly RECOMMENDED
                  A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
                  ui_locales
                  OPTIONAL
                  Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

                  Possible values : fr nl de en
                  display
                  OPTIONAL
                  Specify how the itsme® sign-in page should be displayed to the user. Currently, only the page value is supported but in the future we might support additional display modes like touch.
                  acr_values
                  OPTIONAL
                  Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

                  Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

                  Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
                  http://itsme.services/v2/
                  claim/acr_basic
                  It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
                  http://itsme.services/v2/
                  claim/acr_advanced
                  It forces the user to use his itsme® code.
                  claims
                  OPTIONAL
                  Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
                  It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims - see example below.
                  Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.
                  Supported claims are listed below.
                  name
                  OPTIONAL
                  Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

                  If requested, a value SHALL always be returned for this claim.
                  given_name
                  OPTIONAL
                  Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

                  If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
                  family_name
                  OPTIONAL
                  Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

                  If requested, a value SHALL always be returned for this claim.
                  birthdate
                  OPTIONAL
                  Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

                  BE: If requested, a value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/claim/birthdate_as_string
                  OPTIONAL
                  Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

                  BE: If requested, a value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  gender
                  OPTIONAL
                  Returns user's gender. Possible values are : female male unknown n/a

                  BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
                  NL: A value MAY NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  locale
                  OPTIONAL
                  Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

                  If requested, a value MAY NOT be returned for this claim.
                  picture
                  OPTIONAL
                  Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.

                  Accessing this URL has to be done with your bearer token. Example:
                  GET /v2/picture HTTP/1.1
                  Host: idp.prd.itsme.services
                  Authorization: Bearer SlAV32hkKG
                  http://itsme.services/v2/
                  claim/physical_person_photo
                  OPTIONAL
                  Returns user's ID picture, represented as a JSON Object containing these members:
                  format: the MIME type
                  value: the base64 encoded image.

                  This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  email
                  OPTIONAL
                  Returns user's email address.

                  If requested, a value MAY NOT be returned if the user doesn't gave us an email address.
                  email_verified
                  OPTIONAL
                  Returns true if the user's e-mail address is verified; otherwise false.

                  Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

                  If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
                  phone_number
                  OPTIONAL
                  Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

                  If requested, a value SHALL always be returned for this claim.
                  phone_number_verified
                  OPTIONAL
                  Returns true if the user's phone number is verified; otherwise false.

                  If requested, a value SHALL always be returned for this claim.
                  Note: currently, all phone numbers are verified so this claims always returns true.
                  address
                  OPTIONAL
                  Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

                  BE: A value SHALL always be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/claim_citizenship
                  OPTIONAL
                  Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch ID documents this is represented in the ISO 3166-1 alpha-3 format.

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/claim_citizenship_as_iso
                  OPTIONAL
                  Returns user's nationality. The format is always ISO 3166-1 alpha-3.

                  BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/place_of_birth
                  OPTIONAL
                  Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/BEeidSn
                  OPTIONAL
                  Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

                  BE: A value SHALL always be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/claim_device
                  OPTIONAL
                  Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

                  If requested, a value MAY NOT be returned for this claim.
                  http://itsme.services/v2/
                  claim/transaction_info
                  OPTIONAL
                  Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

                  If requested, a value MAY NOT be returned for this claim.
                  http://itsme.services/v2/
                  claim/BENationalNumber
                  OPTIONAL
                  Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

                  BE: A value SHALL always be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/validityFrom
                  OPTIONAL
                  Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/validityTo
                  OPTIONAL
                  Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

                  If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
                  http://itsme.services/v2/
                  claim/verificationDate
                  OPTIONAL
                  Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/IDDocumentSN
                  OPTIONAL
                  Returns the Dutch ID card/passport number, represented as a string composed of letters at positions 1 and 2 ; letters or digits from positions 3-8: ; and a digit at position 9. The letter ‘O’ is not used in the document numbers. The digit ‘0’ (zero) MAY be used.

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/IDDocumentType
                  OPTIONAL
                  Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/issuance_locality
                  OPTIONAL
                  Returns the locality that issued the ID document used to create the itsme® account.

                  If requested, a value MAY NOT be returned for this claim.
                  sub
                  OPTIONAL
                  Allows the user to bypass the itsme® identification page if he is already logged into your application, by using the user's unique identifier key as value (aka. the user's sub value returned in the ID Token response)
                  request_uri
                  REQUIRED if no "request"
                  A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                  If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                  The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MUST contain the TCP port number 443. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
                  request
                  REQUIRED if no "request_uri"
                  It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                  If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
                  code_challenge
                  OPTIONAL
                  A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
                  code_challenge_method
                  OPTIONAL
                  Code verifier transformation method.

                  It MUST be set to S256.

                  Response

                  302 application/x-www-form-urlencoded

                  code
                  An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

                  Note : the code has a lifetime of 3 minutes.
                  state
                  The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.
                • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/authorize

                  Parameters

                  client_id
                  REQUIRED
                  It identifies your application. This parameter value is generated during registration.
                  response_type
                  REQUIRED
                  This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
                  scope
                  REQUIRED
                  It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

                  All scope values must be space-separated.

                  The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
                  service
                  REQUIRED
                  It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
                  openid
                  REQUIRED
                  It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
                  profile
                  OPTIONAL
                  Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

                  If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
                  email
                  OPTIONAL
                  Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

                  If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
                  address
                  OPTIONAL
                  Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

                  If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
                  phone
                  OPTIONAL
                  Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

                  If requested, a value SHALL always be returned for the above claims.
                  eid
                  OPTIONAL
                  Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

                  If requested, a value SHALL always be returned for the above claims.
                  redirect_uri
                  REQUIRED
                  It is the URL to which users are redirected once the authentication is complete.

                  The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
                  state
                  Strongly RECOMMENDED
                  Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
                  nonce
                  Strongly RECOMMENDED
                  A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
                  ui_locales
                  OPTIONAL
                  Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

                  Possible values : fr nl de en
                  display
                  OPTIONAL
                  Specify how the itsme® sign-in page should be displayed to the user. If set to touch, it SHOULD displays the itsme® sign-in page with a device that leverages a touch interface. If set to page, the itsme® sign-in UI SHOULD be consistent with a full page view of the User-Agent. If the display parameter is not specified, this is the default display mode.
                  acr_values
                  OPTIONAL
                  Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

                  Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

                  Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
                  http://itsme.services/v2/
                  claim/acr_basic
                  It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
                  http://itsme.services/v2/
                  claim/acr_advanced
                  It forces the user to use his itsme® code.
                  claims
                  OPTIONAL
                  Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
                  It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims together with indication whether the claim is voluntary (returned if available) or essential (flow will stop if unavailable) - see example below.
                  Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.
                  Supported claims are listed below.
                  </tr>
                  name
                  OPTIONAL
                  Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

                  If requested, a value SHALL always be returned for this claim.
                  given_name
                  OPTIONAL
                  Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

                  If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
                  family_name
                  OPTIONAL
                  Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

                  If requested, a value SHALL always be returned for this claim.
                  birthdate
                  OPTIONAL
                  Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

                  BE: If requested, a value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/claim/birthdate_as_string
                  OPTIONAL
                  Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

                  BE: If requested, a value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate claim: at least one of the 2 SHALL return a value.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  gender
                  OPTIONAL
                  Returns user's gender. Possible values are : female male unknown n/a

                  BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
                  NL: A value MAY NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  locale
                  OPTIONAL
                  Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

                  If requested, a value MAY NOT be returned for this claim.
                  picture
                  OPTIONAL
                  Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.

                  Accessing this URL has to be done with your bearer token. Example:
                  GET /v2/picture HTTP/1.1
                  Host: idp.prd.itsme.services
                  Authorization: Bearer SlAV32hkKG
                  http://itsme.services/v2/
                  claim/physical_person_photo
                  OPTIONAL
                  Returns user's ID picture, represented as a JSON Object containing these members:
                  format: the MIME type
                  value: the base64 encoded image.

                  This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  email
                  OPTIONAL
                  Returns user's email address.

                  If requested, a value MAY NOT be returned if the user doesn't gave us an email address.
                  email_verified
                  OPTIONAL
                  Returns true if the user's e-mail address is verified; otherwise false.

                  Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

                  If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
                  phone_number
                  OPTIONAL
                  Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

                  If requested, a value SHALL always be returned for this claim.
                  phone_number_verified
                  OPTIONAL
                  Returns true if the user's phone number is verified; otherwise false.

                  If requested, a value SHALL always be returned for this claim.
                  Note: currently, all phone numbers are verified so this claims always returns true.
                  address
                  OPTIONAL
                  Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

                  BE: A value SHALL always be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/claim_citizenship
                  OPTIONAL
                  Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch ID documents this is represented in the ISO 3166-1 alpha-3 format.

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/claim_citizenship_as_iso
                  OPTIONAL
                  Returns user's nationality. The format is always ISO 3166-1 alpha-3.

                  BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/place_of_birth
                  OPTIONAL
                  Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/BEeidSn
                  OPTIONAL
                  Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

                  BE: A value SHALL always be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/claim_device
                  OPTIONAL
                  Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

                  If requested, a value MAY NOT be returned for this claim.
                  http://itsme.services/v2/
                  claim/transaction_info
                  OPTIONAL
                  Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

                  If requested, a value MAY NOT be returned for this claim.
                  http://itsme.services/v2/
                  claim/BENationalNumber
                  OPTIONAL
                  Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

                  BE: A value SHALL always be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/validityFrom
                  OPTIONAL
                  Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL NOT be returned for users with a Dutch ID document.
                  LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/validityTo
                  OPTIONAL
                  Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

                  If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
                  http://itsme.services/v2/
                  claim/verificationDate
                  OPTIONAL
                  Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

                  BE: A value MAY NOT be returned for users with a Belgian ID document.
                  NL: A value SHALL always be returned for users with a Dutch ID document.
                  LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                  http://itsme.services/v2/
                  claim/IDDocumentSN
                  OPTIONAL
                  Returns the Dutch or Luxembourgish ID card/passport number, represented as a string. (NL doc SN is composed of letters at positions 1 and 2 ; letters or digits from positions 3-8: ; and a digit at position 9. The letter ‘O’ is not used in the NL document numbers. The digit ‘0’ (zero) MAY be used.)

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/IDDocumentType
                  OPTIONAL
                  Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/IDIssuingCountry
                  OPTIONAL
                  Returns the 3-letters iso code of the country that issued the identity document.

                  If requested, a value SHALL always be returned for this claim.
                  http://itsme.services/v2/
                  claim/issuance_locality
                  OPTIONAL
                  Returns the locality that issued the ID document used to create the itsme® account.

                  If requested, a value MAY NOT be returned for this claim.
                  sub
                  OPTIONAL
                  Allows the user to bypass the itsme® identification page if already logged into your application, by using the user's unique identifier key as value (aka. the user's sub value returned in a previous Token response). Please, use the following syntax: "sub":{"value":"YOUR_SUB"}
                  request_uri
                  REQUIRED if no "request"
                  A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                  If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                  The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MAY contain any TCP port number. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
                  request
                  REQUIRED if no "request_uri"
                  It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                  If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
                  code_challenge
                  OPTIONAL
                  A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
                  code_challenge_method
                  OPTIONAL
                  Code verifier transformation method.

                  It MUST be set to S256.

                  Response

                  302 application/x-www-form-urlencoded

                  code
                  An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

                  Note : the code has a lifetime of 3 minutes.
                  state
                  The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.

                Example

                • Request

                  GET /v2/authorization HTTP/1.1
                  +
                  • Requesting only the verificationDate will return nothing, as it only returns values for other requested attributes.

                  • The validityTo metadata only has a value for BEeidSn and IDDocumentSN (because other attributes don’t have an expiry date). So validityTo will only return a value if BEeidSn and/or IDDocumentSN is also requested. Even if other attributes are requested, validityTo will not return a value for those other attributes.

                  API reference

                  itsme® Discovery Document

                  • GET https://idp.[e2e/prd].itsme.services/v2/.well-known/openid-configuration

                    To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                    Authorization, Token and userInfo Endpoints Supported claims ...
                  • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/.well-known/openid-configuration

                    To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                    Authorization, Token and userInfo Endpoints Supported claims ...

                  Authorization Request

                  • GET https://idp.[e2e/prd].itsme.services/v2/authorization

                    Parameters

                    client_id
                    REQUIRED
                    It identifies your application. This parameter value is generated during registration.
                    response_type
                    REQUIRED
                    This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
                    scope
                    REQUIRED
                    It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

                    All scope values must be space-separated.

                    The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
                    service
                    REQUIRED
                    It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
                    openid
                    REQUIRED
                    It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
                    profile
                    OPTIONAL
                    Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

                    If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
                    email
                    OPTIONAL
                    Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

                    If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
                    address
                    OPTIONAL
                    Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

                    If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
                    phone
                    OPTIONAL
                    Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

                    If requested, a value SHALL always be returned for the above claims.
                    eid
                    OPTIONAL
                    Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

                    If requested, a value SHALL always be returned for the above claims.
                    redirect_uri
                    REQUIRED
                    It is the URL to which users are redirected once the authentication is complete.

                    The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
                    state
                    Strongly RECOMMENDED
                    Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
                    nonce
                    Strongly RECOMMENDED
                    A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
                    ui_locales
                    OPTIONAL
                    Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

                    Possible values : fr nl de en
                    display
                    OPTIONAL
                    Specify how the itsme® sign-in page should be displayed to the user. Currently, only the page value is supported but in the future we might support additional display modes like touch.
                    acr_values
                    OPTIONAL
                    Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

                    Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

                    Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
                    http://itsme.services/v2/
                    claim/acr_basic
                    It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
                    http://itsme.services/v2/
                    claim/acr_advanced
                    It forces the user to use his itsme® code.
                    claims
                    OPTIONAL
                    Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
                    It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims - see example below.
                    Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.
                    Supported claims are listed below.
                    name
                    OPTIONAL
                    Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

                    If requested, a value SHALL always be returned for this claim.
                    given_name
                    OPTIONAL
                    Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

                    If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
                    family_name
                    OPTIONAL
                    Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

                    If requested, a value SHALL always be returned for this claim.
                    birthdate
                    OPTIONAL
                    Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

                    BE: If requested, a value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/claim/birthdate_as_string
                    OPTIONAL
                    Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

                    BE: If requested, a value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    gender
                    OPTIONAL
                    Returns user's gender. Possible values are : female male unknown n/a

                    BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
                    NL: A value MAY NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    locale
                    OPTIONAL
                    Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

                    If requested, a value MAY NOT be returned for this claim.
                    picture
                    OPTIONAL
                    Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.

                    Accessing this URL has to be done with your bearer token. Example:
                    GET /v2/picture HTTP/1.1
                    Host: idp.prd.itsme.services
                    Authorization: Bearer SlAV32hkKG
                    http://itsme.services/v2/
                    claim/physical_person_photo
                    OPTIONAL
                    Returns user's ID picture, represented as a JSON Object containing these members:
                    format: the MIME type
                    value: the base64 encoded image.

                    This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    email
                    OPTIONAL
                    Returns user's email address.

                    If requested, a value MAY NOT be returned if the user doesn't gave us an email address.
                    email_verified
                    OPTIONAL
                    Returns true if the user's e-mail address is verified; otherwise false.

                    Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

                    If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
                    phone_number
                    OPTIONAL
                    Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

                    If requested, a value SHALL always be returned for this claim.
                    phone_number_verified
                    OPTIONAL
                    Returns true if the user's phone number is verified; otherwise false.

                    If requested, a value SHALL always be returned for this claim.
                    Note: currently, all phone numbers are verified so this claims always returns true.
                    address
                    OPTIONAL
                    Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

                    BE: A value SHALL always be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/claim_citizenship
                    OPTIONAL
                    Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch ID documents this is represented in the ISO 3166-1 alpha-3 format.

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/claim_citizenship_as_iso
                    OPTIONAL
                    Returns user's nationality. The format is always ISO 3166-1 alpha-3.

                    BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/place_of_birth
                    OPTIONAL
                    Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/BEeidSn
                    OPTIONAL
                    Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

                    BE: A value SHALL always be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/claim_device
                    OPTIONAL
                    Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

                    If requested, a value MAY NOT be returned for this claim.
                    http://itsme.services/v2/
                    claim/transaction_info
                    OPTIONAL
                    Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

                    If requested, a value MAY NOT be returned for this claim.
                    http://itsme.services/v2/
                    claim/BENationalNumber
                    OPTIONAL
                    Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

                    BE: A value SHALL always be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/validityFrom
                    OPTIONAL
                    Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/validityTo
                    OPTIONAL
                    Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

                    If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
                    http://itsme.services/v2/
                    claim/verificationDate
                    OPTIONAL
                    Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/IDDocumentSN
                    OPTIONAL
                    Returns the Dutch ID card/passport number, represented as a string composed of letters at positions 1 and 2 ; letters or digits from positions 3-8: ; and a digit at position 9. The letter ‘O’ is not used in the document numbers. The digit ‘0’ (zero) MAY be used.

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/IDDocumentType
                    OPTIONAL
                    Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/issuance_locality
                    OPTIONAL
                    Returns the locality that issued the ID document used to create the itsme® account.

                    If requested, a value MAY NOT be returned for this claim.
                    sub
                    OPTIONAL
                    Allows the user to bypass the itsme® identification page if he is already logged into your application, by using the user's unique identifier key as value (aka. the user's sub value returned in the ID Token response)
                    request_uri
                    REQUIRED if no "request"
                    A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                    If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                    The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MUST contain the TCP port number 443. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
                    request
                    REQUIRED if no "request_uri"
                    It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                    If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
                    code_challenge
                    OPTIONAL
                    A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
                    code_challenge_method
                    OPTIONAL
                    Code verifier transformation method.

                    It MUST be set to S256.

                    Response

                    302 application/x-www-form-urlencoded

                    code
                    An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

                    Note : the code has a lifetime of 3 minutes.
                    state
                    The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.
                  • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/authorize

                    Parameters

                    client_id
                    REQUIRED
                    It identifies your application. This parameter value is generated during registration.
                    response_type
                    REQUIRED
                    This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
                    scope
                    REQUIRED
                    It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

                    All scope values must be space-separated.

                    The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
                    service
                    REQUIRED
                    It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
                    openid
                    REQUIRED
                    It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
                    profile
                    OPTIONAL
                    Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

                    If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
                    email
                    OPTIONAL
                    Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

                    If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
                    address
                    OPTIONAL
                    Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

                    If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
                    phone
                    OPTIONAL
                    Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

                    If requested, a value SHALL always be returned for the above claims.
                    eid
                    OPTIONAL
                    Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

                    If requested, a value SHALL always be returned for the above claims.
                    redirect_uri
                    REQUIRED
                    It is the URL to which users are redirected once the authentication is complete.

                    The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
                    state
                    Strongly RECOMMENDED
                    Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
                    nonce
                    Strongly RECOMMENDED
                    A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
                    ui_locales
                    OPTIONAL
                    Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

                    Possible values : fr nl de en
                    display
                    OPTIONAL
                    Specify how the itsme® sign-in page should be displayed to the user. If set to touch, it SHOULD displays the itsme® sign-in page with a device that leverages a touch interface. If set to page, the itsme® sign-in UI SHOULD be consistent with a full page view of the User-Agent. If the display parameter is not specified, this is the default display mode.
                    acr_values
                    OPTIONAL
                    Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

                    Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

                    Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
                    http://itsme.services/v2/
                    claim/acr_basic
                    It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
                    http://itsme.services/v2/
                    claim/acr_advanced
                    It forces the user to use his itsme® code.
                    claims
                    OPTIONAL
                    Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
                    It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims together with indication whether the claim is voluntary (returned if available) or essential (flow will stop if unavailable) - see example below.
                    Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.
                    Supported claims are listed below.
                    </tr>
                    name
                    OPTIONAL
                    Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

                    If requested, a value SHALL always be returned for this claim.
                    given_name
                    OPTIONAL
                    Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

                    If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
                    family_name
                    OPTIONAL
                    Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

                    If requested, a value SHALL always be returned for this claim.
                    birthdate
                    OPTIONAL
                    Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

                    BE: If requested, a value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/claim/birthdate_as_string
                    OPTIONAL
                    Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

                    BE: If requested, a value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate claim: at least one of the 2 SHALL return a value.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    gender
                    OPTIONAL
                    Returns user's gender. Possible values are : female male unknown n/a

                    BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
                    NL: A value MAY NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    locale
                    OPTIONAL
                    Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

                    If requested, a value MAY NOT be returned for this claim.
                    picture
                    OPTIONAL
                    Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.

                    Accessing this URL has to be done with your bearer token. Example:
                    GET /v2/picture HTTP/1.1
                    Host: idp.prd.itsme.services
                    Authorization: Bearer SlAV32hkKG
                    http://itsme.services/v2/
                    claim/physical_person_photo
                    OPTIONAL
                    Returns user's ID picture, represented as a JSON Object containing these members:
                    format: the MIME type
                    value: the base64 encoded image.

                    This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    email
                    OPTIONAL
                    Returns user's email address.

                    If requested, a value MAY NOT be returned if the user doesn't gave us an email address.
                    email_verified
                    OPTIONAL
                    Returns true if the user's e-mail address is verified; otherwise false.

                    Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

                    If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
                    phone_number
                    OPTIONAL
                    Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

                    If requested, a value SHALL always be returned for this claim.
                    phone_number_verified
                    OPTIONAL
                    Returns true if the user's phone number is verified; otherwise false.

                    If requested, a value SHALL always be returned for this claim.
                    Note: currently, all phone numbers are verified so this claims always returns true.
                    address
                    OPTIONAL
                    Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

                    BE: A value SHALL always be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/claim_citizenship
                    OPTIONAL
                    Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch ID documents this is represented in the ISO 3166-1 alpha-3 format.

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/claim_citizenship_as_iso
                    OPTIONAL
                    Returns user's nationality. The format is always ISO 3166-1 alpha-3.

                    BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/place_of_birth
                    OPTIONAL
                    Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/BEeidSn
                    OPTIONAL
                    Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

                    BE: A value SHALL always be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/claim_device
                    OPTIONAL
                    Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

                    If requested, a value MAY NOT be returned for this claim.
                    http://itsme.services/v2/
                    claim/transaction_info
                    OPTIONAL
                    Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

                    If requested, a value MAY NOT be returned for this claim.
                    http://itsme.services/v2/
                    claim/BENationalNumber
                    OPTIONAL
                    Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

                    BE: A value SHALL always be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/validityFrom
                    OPTIONAL
                    Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL NOT be returned for users with a Dutch ID document.
                    LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/validityTo
                    OPTIONAL
                    Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

                    If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
                    http://itsme.services/v2/
                    claim/verificationDate
                    OPTIONAL
                    Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

                    BE: A value MAY NOT be returned for users with a Belgian ID document.
                    NL: A value SHALL always be returned for users with a Dutch ID document.
                    LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                    http://itsme.services/v2/
                    claim/IDDocumentSN
                    OPTIONAL
                    Returns the Dutch or Luxembourgish ID card/passport number, represented as a string. (NL doc SN is composed of letters at positions 1 and 2 ; letters or digits from positions 3-8: ; and a digit at position 9. The letter ‘O’ is not used in the NL document numbers. The digit ‘0’ (zero) MAY be used.)

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/IDDocumentType
                    OPTIONAL
                    Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/IDIssuingCountry
                    OPTIONAL
                    Returns the 3-letters iso code of the country that issued the identity document.

                    If requested, a value SHALL always be returned for this claim.
                    http://itsme.services/v2/
                    claim/issuance_locality
                    OPTIONAL
                    Returns the locality that issued the ID document used to create the itsme® account.

                    If requested, a value MAY NOT be returned for this claim.
                    sub
                    OPTIONAL
                    Allows the user to bypass the itsme® identification page if already logged into your application, by using the user's unique identifier key as value (aka. the user's sub value returned in a previous Token response). Please, use the following syntax: "sub":{"value":"YOUR_SUB"}
                    request_uri
                    REQUIRED if no "request"
                    A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                    If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                    The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MAY contain any TCP port number. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
                    request
                    REQUIRED if no "request_uri"
                    It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                    If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
                    code_challenge
                    OPTIONAL
                    A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
                    code_challenge_method
                    OPTIONAL
                    Code verifier transformation method.

                    It MUST be set to S256.

                    Response

                    302 application/x-www-form-urlencoded

                    code
                    An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

                    Note : the code has a lifetime of 3 minutes.
                    state
                    The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.

                  Example

                  • Request

                    GET /v2/authorization HTTP/1.1
                     Host: server.example.com
                     
                     response_type=code
                    @@ -71,7 +71,7 @@
                     Location: https://client.example.org/cb?
                       code=SplxlOBeZQQYbYS6WxSbIA
                       &state=anystate
                    -

                  Token Request

                  • POST https://idp.[e2e/prd].itsme.services/v2/token

                    To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the public- and private-key pair method.

                    Parameters

                    grant_type
                    REQUIRED
                    Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID token and access token.
                    code
                    REQUIRED
                    The intermediate opaque credential received in the Authorization Response.
                    redirect_uri
                    REQUIRED
                    It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                    code_verifier
                    OPTIONAL
                    High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.
                    client_assertion_type
                    REQUIRED
                    Specifies the type of assertion. Set this to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
                    client_assertion
                    REQUIRED
                    Is a set of identity and security information, in the form of a JWT, used as an authentication method. To ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code, the JWT MUST be signed, and MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                    The JWT contains the following claims.
                    iss
                    REQUIRED
                    The issuer of the token. This value MUST be the same as the client_id.
                    sub
                    REQUIRED
                    The subject of the token. This value MUST be the same as the client_id.
                    aud
                    REQUIRED
                    The full URL of the resource you're using the JWT to authenticate to. Set this to https://idp.[e2e/prd].itsme.services/v2/token.
                    jti
                    REQUIRED
                    An unique identifier for the token, containing maximum 255 characters.
                    exp
                    REQUIRED
                    The expiration time of the token in seconds since January 1, 1970 UTC.
                    iat
                    OPTIONAL
                    The time at which the JWT was issued.

                    Response

                    200 application/json

                    access_token
                    Allows an application to retrieve consented user information from the UserInfo Endpoint.
                    token_type
                    Provides your application with the information required to successfully utilize the access token. Returned value is Bearer..
                    id_token
                    A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).
                  • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/token

                    To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the secret key method.

                    Parameters

                    grant_type
                    REQUIRED
                    Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID koken and access token.
                    client_id
                    REQUIRED
                    It identifies your application. This parameter value is generated during registration.
                    code
                    REQUIRED
                    The intermediate opaque credential received in the Authorization Response.
                    redirect_uri
                    REQUIRED
                    It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                    client_secret
                    REQUIRED
                    Contains the a key you reveiced when registering your application. This ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code.
                    code_verifier
                    OPTIONAL
                    High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.

                    Response

                    200 application/json

                    access_token
                    Allows an application to retrieve consented user information from the UserInfo Endpoint.
                    token_type
                    Provides your application with the information required to successfully utilize the access token. Returned value is Bearer.
                    id_token
                    A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).

                  Example

                  • Request

                    POST /token HTTP/1.1
                    +

                  Token Request

                  • POST https://idp.[e2e/prd].itsme.services/v2/token

                    To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the public- and private-key pair method.

                    Parameters

                    grant_type
                    REQUIRED
                    Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID token and access token.
                    code
                    REQUIRED
                    The intermediate opaque credential received in the Authorization Response.
                    redirect_uri
                    REQUIRED
                    It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                    code_verifier
                    OPTIONAL
                    High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.
                    client_assertion_type
                    REQUIRED
                    Specifies the type of assertion. Set this to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
                    client_assertion
                    REQUIRED
                    Is a set of identity and security information, in the form of a JWT, used as an authentication method. To ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code, the JWT MUST be signed, and MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                    The JWT contains the following claims.
                    iss
                    REQUIRED
                    The issuer of the token. This value MUST be the same as the client_id.
                    sub
                    REQUIRED
                    The subject of the token. This value MUST be the same as the client_id.
                    aud
                    REQUIRED
                    The full URL of the resource you're using the JWT to authenticate to. Set this to https://idp.[e2e/prd].itsme.services/v2/token.
                    jti
                    REQUIRED
                    An unique identifier for the token, containing maximum 255 characters.
                    exp
                    REQUIRED
                    The expiration time of the token in seconds since January 1, 1970 UTC.
                    iat
                    OPTIONAL
                    The time at which the JWT was issued.

                    Response

                    200 application/json

                    access_token
                    Allows an application to retrieve consented user information from the UserInfo Endpoint.
                    token_type
                    Provides your application with the information required to successfully utilize the access token. Returned value is Bearer..
                    id_token
                    A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).
                  • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/token

                    To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the secret key method.

                    Parameters

                    grant_type
                    REQUIRED
                    Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID koken and access token.
                    client_id
                    REQUIRED
                    It identifies your application. This parameter value is generated during registration.
                    code
                    REQUIRED
                    The intermediate opaque credential received in the Authorization Response.
                    redirect_uri
                    REQUIRED
                    It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                    client_secret
                    REQUIRED
                    Contains the a key you reveiced when registering your application. This ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code.
                    code_verifier
                    OPTIONAL
                    High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.

                    Response

                    200 application/json

                    access_token
                    Allows an application to retrieve consented user information from the UserInfo Endpoint.
                    token_type
                    Provides your application with the information required to successfully utilize the access token. Returned value is Bearer.
                    id_token
                    A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).

                  Example

                  • Request

                    POST /token HTTP/1.1
                     Host: openid.c2id.com
                     Content-Type: application/x-www-form-urlencoded
                     
                    @@ -152,7 +152,7 @@
                     	"exp": 1699538407,
                     	"iat": 1699538107
                     }
                    -

                    UserInfo Request

                    • GET https://idp.[e2e/prd].itsme.services/v2/userinfo

                      The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

                      This is illustrated in the example below.

                      Response

                      200 application/json

                      The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

                    • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/userinfo

                      The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

                      This is illustrated in the example below.

                      Response

                      200 application/json

                      The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

                    Example

                    Request

                    GET /userinfo HTTP/1.1
                    +

                    UserInfo Request

                    • GET https://idp.[e2e/prd].itsme.services/v2/userinfo

                      The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

                      This is illustrated in the example below.

                      Response

                      200 application/json

                      The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

                    • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/userinfo

                      The UserInfo Endpoint returns previously consented user profile information to your application. In other words, if the required claims are not returned in the ID Token, you can obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint. This is achieved by sending a HTTP GET request to the Userinfo Endpoint, passing the access token value in the Authorization header using the Bearer authentication scheme.

                      This is illustrated in the example below.

                      Response

                      200 application/json

                      The UserInfo Response is represented as a signed and encrypted JWT. So, before being able to extract the claims you will have to decrypt and verify the signature (refer to this page for more information).

                    Example

                    Request

                    GET /userinfo HTTP/1.1
                     Host: server.example.com
                     Authorization: Bearer SlAV32hkKG
                     

                    Response

                    This is an response example containing all possible claims for a Belgian account:

                    HTTP/1.1 200 OK
                    @@ -255,7 +255,7 @@
                     	"exp": 1681314490,
                     	"iat": 1681314190
                     }
                    -

                    Revoke Request

                    • Not applicable.

                    • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/revoke

                      The Revocation Endpoint enables your application to notify itsme® that a previously obtained access token is no longer needed and MUST be revoked.

                      Parameters

                      token
                      REQUIRED
                      The access_token previously obtained that you want to revoke.
                      token_type_hint
                      OPTIONAL
                      A hint about the type of the token submitted for revocation. You MAY pass this parameter in order to help itsme® to optimize the token lookup. If the server is unable to locate the token using the given hint, it MUST extend its search across all of its supported token types. If used, this is set to access_token because itsme® API don't support refresh tokens.

                      Response

                      200

                      itsme® responds with HTTP status code 200 if the token has been revoked successfully or if the client submitted an invalid token.

                    Example

                    • Not applicable.

                    • Request

                      POST /connect/revoke HTTP/1.1
                      +

                      Revoke Request

                      • Not applicable.

                      • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/revoke

                        The Revocation Endpoint enables your application to notify itsme® that a previously obtained access token is no longer needed and MUST be revoked.

                        Parameters

                        token
                        REQUIRED
                        The access_token previously obtained that you want to revoke.
                        token_type_hint
                        OPTIONAL
                        A hint about the type of the token submitted for revocation. You MAY pass this parameter in order to help itsme® to optimize the token lookup. If the server is unable to locate the token using the given hint, it MUST extend its search across all of its supported token types. If used, this is set to access_token because itsme® API don't support refresh tokens.

                        Response

                        200

                        itsme® responds with HTTP status code 200 if the token has been revoked successfully or if the client submitted an invalid token.

                      Example

                      • Not applicable.

                      • Request

                        POST /connect/revoke HTTP/1.1
                         Host: server.example.com
                         Content-Type: application/x-www-form-urlencoded
                         Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
                        diff --git a/feed.xml b/feed.xml
                        index 098797b00..8f53b7143 100644
                        --- a/feed.xml
                        +++ b/feed.xml
                        @@ -1,4 +1,4 @@
                        -Jekyll2024-01-13T02:14:12+00:00https://belgianmobileid.github.io/doc/feed.xmlitsme OIDC DocumentationThis website documents how to use the itsme OpenID Connect interface.Welcome to Jekyll!2020-09-24T10:11:55+00:002020-09-24T10:11:55+00:00https://belgianmobileid.github.io/doc/jekyll/update/2020/09/24/welcome-to-jekyll<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>
                        +Jekyll2024-01-14T02:15:56+00:00https://belgianmobileid.github.io/doc/feed.xmlitsme OIDC DocumentationThis website documents how to use the itsme OpenID Connect interface.Welcome to Jekyll!2020-09-24T10:11:55+00:002020-09-24T10:11:55+00:00https://belgianmobileid.github.io/doc/jekyll/update/2020/09/24/welcome-to-jekyll<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>
                         
                         <p>Jekyll requires blog post files to be named according to the following format:</p>
                         
                        diff --git a/forgerock/index.html b/forgerock/index.html
                        index 5230f8249..0aae6ef40 100644
                        --- a/forgerock/index.html
                        +++ b/forgerock/index.html
                        @@ -1 +1 @@
                        -     Forgerock | Ping Identity - itsme OIDC Documentation       Forgerock Ping Identity | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

                        Prerequisites

                        This integration relies on the ForgeRock Social Provider Handler Node which is available in ForgeRock Platform 7 and assumes integration between AM and IDM has been configured. Please, refer to .

                        • A Forgerock account/subscription. If you don’t have a subscription, please contact Forgerock at https://www.forgerock.com/contact
                        • A Forgerock tenant that is linked to your forgerock subscription.
                        • Your Client ID, also known as Partner code, provided by itsme®.
                        • Your Service code provided by itsme®.
                        • Your public jwkset_uri (please, provide it to onboarding@itsme-id.com) or the secret provided by itsme® (in case of client secret)
                        • Your redirect_uri you will be redirecting the user to (please, provide it to onboarding@itsme-id.com), e.g. https://openam-itsme-demo.forgeblocks.com/am

                        Scenario

                        itsme-Forgerock schema

                        1. On your website or application, include the Log in with itsme® button by adapting in the Forgerock user flow. The interaction flow starts when the user clicks on this button.
                        2. Forgerock starts the OpenID connect flow by sending an Authorize request to the itsme® API. is pre-configured within Forgerock ecosystem & contains information about the endpoints.
                        3. itsme® environment redirects the user to the itsme® identify yourself page, allowing the user to fill in their phone number.
                        4. itsme® receives the phone number from the user and validates it.
                        5. If the phone number belongs to an active itsme® user, an Action is created for the itsme® app.
                        6. The user opens the itsme® app, checks the request, and confirms the action.
                        7. The app informs the itsme® environment the action has been confirmed.
                        8. The itsme® environment returns the authorization code to Forgerock.
                        9. Using the authorization code, Forgerock makes a token request.
                        10. The itsme® environment checks the token request, and if still valid, returns the OAuth access token and the ID token containing the requested user information.
                        11. Finally, the user is redirected to the redirect_uri as an authenticated user.

                        Configuration between Forgerock and itsme®

                        Step 1: Setup itsme® to ForgeRock AM

                        1. Log in to the forgerock Identity cloud
                        2. Go to “native consoles” > “access management”
                        3. Go to “services” > “social identity provider service” > “secondary configuration”
                        4. Select itsme®
                        5. Populate the details with the parameters you got from itsme®: (NOTE: Forgerock automatically populates these fields with production endpoints. Initially, these need to be changed to E2E endpoints in order to function.)
                        Parameter Value
                        ClientID Your Client ID, also known as Partner code
                        Client Secret Your client_secret (leave empty in case of public-private key pair, i.e. jwkset_uri)
                        Authentication Endpoint URL “https://idp.e2e.itsme.services/v2/authorization”
                        Token Endpoint “https://idp.e2e.itsme.services/v2/token”
                        User Profile Service URL “https://idp.e2e.itsme.services/v2/userinfo”
                        RedirectURI your redirectURI
                        NOTE: for itsme® to function in production, the Forgerock tenant needs to be installed with a custom domain (https://backstage.forgerock.com/docs/idcloud/latest/realms/custom-domains.html#set_up_a_custom_domain_in_identity_cloud) and an OV/EV certificate. Please contact Forgerock support to make sure this is installed on your tenant.
                        OAuth Scopes openid profile email service:YOURSERVICECODE
                        Client Authentication Method ENCRYPTED_PRIVATE_KEY_JWT
                        PKCE method S256
                        Request Parameter JWT Option NONE
                        ACR Values N/A
                        Well Known Endpoint https://idp.e2e.itsme.services/v2/.well-known/openid-configuration
                        Request Object Audience “https://idp.e2e.itsme.services/v2/authorization”
                        Issuer https://idp.e2e.itsme.services/V2/jwkSet

                        All other fields can be left on the default settings from Forgerock.

                        1. Select ‘itsme® profile normalization’ in the transform script drop-down menu.

                        Step 2: Define your itsme® journey

                        Go to Journeys and select itsme® to build your workflow. There is already a custom flow ready for you to use with itsme®. By default, it includes a username/password flow with itsme® added as a secondary option, but this can be adapted as you wish. itsme tenant tree

                        + Forgerock | Ping Identity - itsme OIDC Documentation Forgerock Ping Identity | itsme OIDC Documentation Link Search Menu Expand Document

                        Prerequisites

                        This integration relies on the ForgeRock Social Provider Handler Node which is available in ForgeRock Platform 7 and assumes integration between AM and IDM has been configured. Please, refer to .

                        • A Forgerock account/subscription. If you don’t have a subscription, please contact Forgerock at https://www.forgerock.com/contact
                        • A Forgerock tenant that is linked to your forgerock subscription.
                        • Your Client ID, also known as Partner code, provided by itsme®.
                        • Your Service code provided by itsme®.
                        • Your public jwkset_uri (please, provide it to onboarding@itsme-id.com) or the secret provided by itsme® (in case of client secret)
                        • Your redirect_uri you will be redirecting the user to (please, provide it to onboarding@itsme-id.com), e.g. https://openam-itsme-demo.forgeblocks.com/am

                        Scenario

                        itsme-Forgerock schema

                        1. On your website or application, include the Log in with itsme® button by adapting in the Forgerock user flow. The interaction flow starts when the user clicks on this button.
                        2. Forgerock starts the OpenID connect flow by sending an Authorize request to the itsme® API. is pre-configured within Forgerock ecosystem & contains information about the endpoints.
                        3. itsme® environment redirects the user to the itsme® identify yourself page, allowing the user to fill in their phone number.
                        4. itsme® receives the phone number from the user and validates it.
                        5. If the phone number belongs to an active itsme® user, an Action is created for the itsme® app.
                        6. The user opens the itsme® app, checks the request, and confirms the action.
                        7. The app informs the itsme® environment the action has been confirmed.
                        8. The itsme® environment returns the authorization code to Forgerock.
                        9. Using the authorization code, Forgerock makes a token request.
                        10. The itsme® environment checks the token request, and if still valid, returns the OAuth access token and the ID token containing the requested user information.
                        11. Finally, the user is redirected to the redirect_uri as an authenticated user.

                        Configuration between Forgerock and itsme®

                        Step 1: Setup itsme® to ForgeRock AM

                        1. Log in to the forgerock Identity cloud
                        2. Go to “native consoles” > “access management”
                        3. Go to “services” > “social identity provider service” > “secondary configuration”
                        4. Select itsme®
                        5. Populate the details with the parameters you got from itsme®: (NOTE: Forgerock automatically populates these fields with production endpoints. Initially, these need to be changed to E2E endpoints in order to function.)
                        Parameter Value
                        ClientID Your Client ID, also known as Partner code
                        Client Secret Your client_secret (leave empty in case of public-private key pair, i.e. jwkset_uri)
                        Authentication Endpoint URL “https://idp.e2e.itsme.services/v2/authorization”
                        Token Endpoint “https://idp.e2e.itsme.services/v2/token”
                        User Profile Service URL “https://idp.e2e.itsme.services/v2/userinfo”
                        RedirectURI your redirectURI
                        NOTE: for itsme® to function in production, the Forgerock tenant needs to be installed with a custom domain (https://backstage.forgerock.com/docs/idcloud/latest/realms/custom-domains.html#set_up_a_custom_domain_in_identity_cloud) and an OV/EV certificate. Please contact Forgerock support to make sure this is installed on your tenant.
                        OAuth Scopes openid profile email service:YOURSERVICECODE
                        Client Authentication Method ENCRYPTED_PRIVATE_KEY_JWT
                        PKCE method S256
                        Request Parameter JWT Option NONE
                        ACR Values N/A
                        Well Known Endpoint https://idp.e2e.itsme.services/v2/.well-known/openid-configuration
                        Request Object Audience “https://idp.e2e.itsme.services/v2/authorization”
                        Issuer https://idp.e2e.itsme.services/V2/jwkSet

                        All other fields can be left on the default settings from Forgerock.

                        1. Select ‘itsme® profile normalization’ in the transform script drop-down menu.

                        Step 2: Define your itsme® journey

                        Go to Journeys and select itsme® to build your workflow. There is already a custom flow ready for you to use with itsme®. By default, it includes a username/password flow with itsme® added as a secondary option, but this can be adapted as you wish. itsme tenant tree

                        diff --git a/identification/index.html b/identification/index.html index 7f577ad7b..37a4e575e 100644 --- a/identification/index.html +++ b/identification/index.html @@ -1,4 +1,4 @@ - Identification API - itsme OIDC Documentation Identification API | itsme OIDC Documentation Link Search Menu Expand Document

                        Overview

                        itsme® API is based on the Authorization Code Flow of OpenID Connect 1.0. The API can be used to verify your end-users’ identity and obtain some information about them. For the exact user data that can be requested, please see the Authorization Request parameters.

                        The diagram below describes the Identification process and how your systems should integrate with itsme® :

                        Sequence diagram describing the OpenID flow

                        To get to this result please make sure you

                        1. add itsme® button to your front-end page so the user can indicate he wishes to authenticate with itsme® : itsme® button specifications.
                        2. create the Authorization Request to authenticate the User. This request will redirect the user to the itsme® app. itsme® will then authenticates the user by asking him
                          • to enter his phone number on the itsme® sign-in page
                          • authorize the release of some information to your application
                          • to provide his credentials (itsme® code, fingerprint or FaceID)

                          It is also in this Authorization Request that you will be able to request claims about the user and the Identification event.
                        3. collect the Authorization Code once the user has been authenticated and redirected by itsme® to your mobile or web application.
                        4. exchange the Authorization Code for an ID token (e.g. identifying the user) and an Access Token.
                        5. Obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint if the required claims are not returned in the ID token.
                        6. Confirm the success of the operation and display a success message.

                        Onboarding

                        To make use of our services, you will need to contact our Customer Care team at onboarding@itsme-id.com. Based on your requirements, they will configure for you a new partner in our database. You will receive the clientID corresponding to this partner, that you will need to include in your Authorization Request.

                        Each partner can contain multiple “services”. Each service should correspond to one user flow at your side and can be of type Authentication, Identification or Confirmation. The service code will also be required in your Authorization Request.

                        For each service, you will have to provide one or a few “redirect_uri”, which are the landing page(s) where the end user will be sent after authenticating with itsme®. Only the URIs whitelisted in a service will be allowed in your Authorization Request, so they have to be fully determined before you can use the service. This whitelisting works on an “exact match” basis, including the full (case sensitive) path and query string so please communicate the exact string you are planning to use in your Authorization Request.

                        Guides

                        Generate itsme® button

                        First, you will need to create a button to allow your users to authenticate with itsme®. Check the Button design guide before you start the integration.

                        Upon clicking this button, the user will be redirected to our Front-End. itsme® then take care of their identification.

                        Securing the exchange of information

                        To protect the exchange of sensitive information and ensure the requested information gets issued to a legitimate application and not some other party, the OpenID Connect protocol uses JSON Web Token (JWT) which can be signed and/or encrypted. Among the methods described in OpenID specification, itsme® supports 2 authentication methods to secure communications between your backend and itsme®:

                        • "Private key JWT" is based on a public/private key pair (asymmetric encryption). It is therefore the most secure option
                        • "Client secret" is based on a shared Secret key (symmetric encryption). It can be easier to implement in some cases

                        Public-private key pair and JWKSet URI

                        This method uses a pair of keys (1 public, 1 private) to encrypt and decrypt senders’ and recipients’ sensitive data. It is also known as public-key cryptography or asymetric encryption.

                        You can retrieve the itsme® JWK Set from the URI mentioned as jwks_uri in our itsme® Discovery document.

                        Secret key method

                        Secret key cryptography method uses the same secret key to encrypt and decrypt sensitive information. This approach is the inverse of public- and private-key encryption.

                        This method requires the exchange of a static secret to be held by both the sender and the data receiver. The secret value will be provided by itsme® when registering your project.

                        Key rotation procedure

                        for public-private key pair and JWKSet URI

                        itsme® backend has cache mechanism in place, which is sporadic (from 30min to 24h). During this time, we will keep on using old keys.

                        Rotating signing key:

                        • Add the new key to JWK set, with a new “kid”
                        • Start using the new key to sign JWTs
                        • When the flow is validated with the new key, remove the old one from the JWK set

                        Rotating encryption key:

                        • Replace the old key with the new one in JWK set, but still support old and new keys in decryption process
                        • Wait 24h (or wait for “max-age” amount of time, if specified)
                        • Decommission the old key completely

                        Changing the key could come along with changing the jwkset url. If that is the case, communicate new available jwkset url to onboarding@itsme-id.com. It is not be possible to be perfectly in sync, a few failed flows should be expected in the lapse of time between jwkset url update and the key update at the partner’s side. Smoother way would be:

                        • Copy the old jwkSet on the new URL
                        • the URL is communicated & registered by itsme®
                        • Rotate the keys in the jwkSet on the new URL as per rotating keys info above

                        for secret key method

                        Please, reach out to onboarding@itsme-id.com in case the secret key should be rotated.

                        PKCE-enhanced flow

                        Whatever the chosen authentication method, itsme® also supports an extra security extension named Proof of Key for Code Exchange (PKCE). This additionnal layer of security is intended to mitigate some Authorization Code interception attacks. For this mechanism to achieve its full potential, PKCE has to be made mandatory in your flow, which is an option we can enable for you (strongly recommended). Please ask our onboarding team to do so when registering your project.

                        PKCE implies choosing a random string, named code_verifier, and then generating a SHA256 hash of that string, named code_challenge. The code_challenge has to be sent along with the Authorization Request, while the code_verifier must be sent with the Token Request, allowing our backend to make sure both requests are issued by the same source.

                        code_challenge can then be obtained via this kind of instructions:

                        var hash = code_verifier.createHash('sha256');
                        +     Identification API - itsme OIDC Documentation       Identification API | itsme OIDC Documentation                  Link      Search      Menu      Expand      Document       

                        Overview

                        itsme® API is based on the Authorization Code Flow of OpenID Connect 1.0. The API can be used to verify your end-users’ identity and obtain some information about them. For the exact user data that can be requested, please see the Authorization Request parameters.

                        The diagram below describes the Identification process and how your systems should integrate with itsme® :

                        Sequence diagram describing the OpenID flow

                        To get to this result please make sure you

                        1. add itsme® button to your front-end page so the user can indicate he wishes to authenticate with itsme® : itsme® button specifications.
                        2. create the Authorization Request to authenticate the User. This request will redirect the user to the itsme® app. itsme® will then authenticates the user by asking him
                          • to enter his phone number on the itsme® sign-in page
                          • authorize the release of some information to your application
                          • to provide his credentials (itsme® code, fingerprint or FaceID)

                          It is also in this Authorization Request that you will be able to request claims about the user and the Identification event.
                        3. collect the Authorization Code once the user has been authenticated and redirected by itsme® to your mobile or web application.
                        4. exchange the Authorization Code for an ID token (e.g. identifying the user) and an Access Token.
                        5. Obtain the additional claims by presenting the access token to the itsme® UserInfo Endpoint if the required claims are not returned in the ID token.
                        6. Confirm the success of the operation and display a success message.

                        Onboarding

                        To make use of our services, you will need to contact our Customer Care team at onboarding@itsme-id.com. Based on your requirements, they will configure for you a new partner in our database. You will receive the clientID corresponding to this partner, that you will need to include in your Authorization Request.

                        Each partner can contain multiple “services”. Each service should correspond to one user flow at your side and can be of type Authentication, Identification or Confirmation. The service code will also be required in your Authorization Request.

                        For each service, you will have to provide one or a few “redirect_uri”, which are the landing page(s) where the end user will be sent after authenticating with itsme®. Only the URIs whitelisted in a service will be allowed in your Authorization Request, so they have to be fully determined before you can use the service. This whitelisting works on an “exact match” basis, including the full (case sensitive) path and query string so please communicate the exact string you are planning to use in your Authorization Request.

                        Guides

                        Generate itsme® button

                        First, you will need to create a button to allow your users to authenticate with itsme®. Check the Button design guide before you start the integration.

                        Upon clicking this button, the user will be redirected to our Front-End. itsme® then take care of their identification.

                        Securing the exchange of information

                        To protect the exchange of sensitive information and ensure the requested information gets issued to a legitimate application and not some other party, the OpenID Connect protocol uses JSON Web Token (JWT) which can be signed and/or encrypted. Among the methods described in OpenID specification, itsme® supports 2 authentication methods to secure communications between your backend and itsme®:

                        • "Private key JWT" is based on a public/private key pair (asymmetric encryption). It is therefore the most secure option
                        • "Client secret" is based on a shared Secret key (symmetric encryption). It can be easier to implement in some cases

                        Public-private key pair and JWKSet URI

                        This method uses a pair of keys (1 public, 1 private) to encrypt and decrypt senders’ and recipients’ sensitive data. It is also known as public-key cryptography or asymetric encryption.

                        You can retrieve the itsme® JWK Set from the URI mentioned as jwks_uri in our itsme® Discovery document.

                        Secret key method

                        Secret key cryptography method uses the same secret key to encrypt and decrypt sensitive information. This approach is the inverse of public- and private-key encryption.

                        This method requires the exchange of a static secret to be held by both the sender and the data receiver. The secret value will be provided by itsme® when registering your project.

                        Key rotation procedure

                        for public-private key pair and JWKSet URI

                        itsme® backend has cache mechanism in place, which is sporadic (from 30min to 24h). During this time, we will keep on using old keys.

                        Rotating signing key:

                        • Add the new key to JWK set, with a new “kid”
                        • Start using the new key to sign JWTs
                        • When the flow is validated with the new key, remove the old one from the JWK set

                        Rotating encryption key:

                        • Replace the old key with the new one in JWK set, but still support old and new keys in decryption process
                        • Wait 24h (or wait for “max-age” amount of time, if specified)
                        • Decommission the old key completely

                        Changing the key could come along with changing the jwkset url. If that is the case, communicate new available jwkset url to onboarding@itsme-id.com. It is not be possible to be perfectly in sync, a few failed flows should be expected in the lapse of time between jwkset url update and the key update at the partner’s side. Smoother way would be:

                        • Copy the old jwkSet on the new URL
                        • the URL is communicated & registered by itsme®
                        • Rotate the keys in the jwkSet on the new URL as per rotating keys info above

                        for secret key method

                        Please, reach out to onboarding@itsme-id.com in case the secret key should be rotated.

                        PKCE-enhanced flow

                        Whatever the chosen authentication method, itsme® also supports an extra security extension named Proof of Key for Code Exchange (PKCE). This additionnal layer of security is intended to mitigate some Authorization Code interception attacks. For this mechanism to achieve its full potential, PKCE has to be made mandatory in your flow, which is an option we can enable for you (strongly recommended). Please ask our onboarding team to do so when registering your project.

                        PKCE implies choosing a random string, named code_verifier, and then generating a SHA256 hash of that string, named code_challenge. The code_challenge has to be sent along with the Authorization Request, while the code_verifier must be sent with the Token Request, allowing our backend to make sure both requests are issued by the same source.

                        code_challenge can then be obtained via this kind of instructions:

                        var hash = code_verifier.createHash('sha256');
                         var code_challenge = base64url.encode(hash);
                         

                        Signing, encrypting and decoding JWTs

                        Libraries implementing JWT and the JOSE specs JWS, JWE, JWK, and JWA are listed here. For testing purposes only, we could advise the use of https://mkjwk.org/ for JWK generation and https://mkjose.org/ for payload check => these are 2 open-source tools which will help you visualize JWK mechanisms, client assertion construct. Please DO NOT generate production private keys on any website. Rather opt for the relevant SDK library mentioned here.

                        Certificates and website security

                        itsme® requires https connections to guarantee security. With the https protocol, a web site operator obtains a certificate by applying to a certificate authority with a certificate signing request. The certificate request is an electronic document that contains the web site name, company information and the public key. The certificate provider signs the request, thus producing a public certificate. During web browsing, this public certificate is served to any web browser that connects to the web site and proves to the web browser that the provider believes it has issued a certificate to the owner of the web site.

                        A certificate provider can opt to issue three types of certificates, each requiring its own degree of vetting rigor. In order of increasing rigor (and naturally, cost) they are: Domain Validation, Organization Validation and Extended Validation.

                        The Domain Validation certificate doesn’t provide sufficient identity guarantees to itsme. So, only the Organization Validation and Extended Validation certificates are supported. For example, using the Let’s Encrypt open certificate authority is not suffcient because it only provide standard Domain Validation certificates.

                        Handling responses

                        Whenever a partner is sending a request to the itsme OIDC endpoints he will get a response back. According to the OIDC protocol, and depending on the endpoint that was contacted, partners can get a

                        • response where some parameters are added to the query component of the redirection URI using the application/x-www-form-urlencoded format, or
                        • response displayed directly on our itsme® sign-in page ;
                        • response using the application/json media type

                        Alongside the type of response an HTTP status code is sent that shows whether the request was successful or not. If it was not, you can tell by the code and the message in the response what went wrong, why it went wrong and whether there is something the partner can do about it.

                        A successful response

                        An HTTP status 200 OK or 302 Found is issued whenever your request was a success. You see this type of response in our examples like the one where we successfully retrieve the Token Response :

                        HTTP/1.1 200 OK
                         Content-Type: application/json
                        @@ -39,7 +39,7 @@
                         		"birthdate": "2023-06-01T13:04:26Z",
                         		"given_name": "2023-06-01T13:04:26Z"
                         	}
                        -
                        • Requesting only the verificationDate will return nothing, as it only returns values for other requested attributes.

                        • The validityTo metadata only has a value for BEeidSn and IDDocumentSN (because other attributes don’t have an expiry date). So validityTo will only return a value if BEeidSn and/or IDDocumentSN is also requested. Even if other attributes are requested, validityTo will not return a value for those other attributes.

                        API reference

                        itsme® Discovery Document

                        • GET https://idp.[e2e/prd].itsme.services/v2/.well-known/openid-configuration

                          To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                          Authorization, Token and userInfo Endpoints Supported claims ...
                        • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/.well-known/openid-configuration

                          To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                          Authorization, Token and userInfo Endpoints Supported claims ...

                        Authorization Request

                        • GET https://idp.[e2e/prd].itsme.services/v2/authorization

                        • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/authorize

                        Parameters

                        client_id
                        REQUIRED
                        It identifies your application. This parameter value is generated during registration.
                        response_type
                        REQUIRED
                        This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
                        scope
                        REQUIRED
                        It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

                        All scope values must be space-separated.

                        The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
                        service
                        REQUIRED
                        It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
                        openid
                        REQUIRED
                        It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
                        profile
                        OPTIONAL
                        Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

                        If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
                        email
                        OPTIONAL
                        Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

                        If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
                        address
                        OPTIONAL
                        Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

                        If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
                        phone
                        OPTIONAL
                        Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

                        If requested, a value SHALL always be returned for the above claims.
                        eid
                        OPTIONAL
                        Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

                        If requested, a value SHALL always be returned for the above claims.
                        redirect_uri
                        REQUIRED
                        It is the URL to which users are redirected once the authentication is complete.

                        The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
                        state
                        Strongly RECOMMENDED
                        Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
                        nonce
                        Strongly RECOMMENDED
                        A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
                        ui_locales
                        OPTIONAL
                        Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

                        Possible values : fr nl de en
                        display
                        OPTIONAL
                        Specify how the itsme® sign-in page should be displayed to the user. Currently, only the page value is supported but in the future we might support additional display modes like touch.
                        acr_values
                        OPTIONAL
                        Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

                        Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

                        Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
                        http://itsme.services/v2/
                        claim/acr_basic
                        It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
                        http://itsme.services/v2/
                        claim/acr_advanced
                        It forces the user to use his itsme® code.
                        claims
                        OPTIONAL
                        Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
                        It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims - see example below.
                        Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.

                        Supported claims are listed below.
                        name
                        OPTIONAL
                        Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

                        If requested, a value SHALL always be returned for this claim.
                        given_name
                        OPTIONAL
                        Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

                        If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
                        family_name
                        OPTIONAL
                        Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

                        If requested, a value SHALL always be returned for this claim.
                        birthdate
                        OPTIONAL
                        Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

                        BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
                        NL: A value SHALL always be returned for users with a Dutch ID document.
                        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/claim/birthdate_as_string
                        OPTIONAL
                        Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

                        BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate claim: at least one of the 2 SHALL return a value.
                        NL: A value SHALL NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                        gender
                        OPTIONAL
                        Returns user's gender. Possible values are : female male unknown n/a

                        BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
                        NL: A value MAY NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                        locale
                        OPTIONAL
                        Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

                        If requested, a value MAY NOT be returned for this claim.
                        picture
                        OPTIONAL
                        Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

                        BE: A value MAY NOT be returned for users with a Belgian ID document.
                        NL: A value SHALL always be returned for users with a Dutch ID document.
                        LU: A value SHALL always be returned for users with a Luxembourgish ID document.

                        Accessing this URL has to be done with your bearer token. Example:
                        GET /v2/picture HTTP/1.1
                        Host: idp.prd.itsme.services
                        Authorization: Bearer SlAV32hkKG
                        http://itsme.services/v2/
                        claim/physical_person_photo
                        OPTIONAL
                        Returns user's ID picture, represented as a JSON Object containing these members:
                        format: the MIME type
                        value: the base64 encoded image.

                        This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

                        BE: A value MAY NOT be returned for users with a Belgian ID document.
                        NL: A value SHALL always be returned for users with a Dutch ID document.
                        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                        email
                        OPTIONAL
                        Returns user's email address.

                        If requested, a value MAY NOT be returned.
                        email_verified
                        OPTIONAL
                        Returns true if the user's e-mail address is verified; otherwise false.

                        Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

                        If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
                        phone_number
                        OPTIONAL
                        Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

                        If requested, a value SHALL always be returned for this claim.
                        phone_number_verified
                        OPTIONAL
                        Returns true if the user's phone number is verified; otherwise false.

                        If requested, a value SHALL always be returned for this claim.
                        Note: currently, all phone numbers are verified so this claims always returns true.
                        address
                        OPTIONAL
                        Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

                        BE: A value SHALL always be returned for users with a Belgian ID document.
                        NL: A value SHALL NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/claim_citizenship
                        OPTIONAL
                        Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch or Lux ID documents this is represented in the ISO 3166-1 alpha-3 format.

                        If requested, a value SHALL always be returned for this claim.
                        http://itsme.services/v2/
                        claim/claim_citizenship_as_iso
                        OPTIONAL
                        Returns user's nationality. The format is always ISO 3166-1 alpha-3.

                        BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
                        NL: A value SHALL always be returned for users with a Dutch ID document.
                        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/place_of_birth
                        OPTIONAL
                        Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

                        BE: A value MAY NOT be returned for users with a Belgian ID document.
                        NL: A value SHALL NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/BEeidSn
                        OPTIONAL
                        Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

                        BE: A value SHALL always be returned for users with a Belgian ID document.
                        NL: A value SHALL NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/claim_device
                        OPTIONAL
                        Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

                        If requested, a value MAY NOT be returned for this claim.
                        http://itsme.services/v2/
                        claim/transaction_info
                        OPTIONAL
                        Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

                        If requested, a value MAY NOT be returned for this claim.
                        http://itsme.services/v2/
                        claim/BENationalNumber
                        OPTIONAL
                        Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

                        BE: A value SHALL always be returned for users with a Belgian ID document.
                        NL: A value SHALL NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/validityFrom
                        OPTIONAL
                        This is a metadata.
                        Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
                        BE: A value MAY NOT be returned for users with a Belgian ID document.
                        NL: A value SHALL NOT be returned for users with a Dutch ID document.
                        LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/validityTo
                        OPTIONAL
                        This is a metadata.
                        Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

                        If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
                        http://itsme.services/v2/
                        claim/verificationDate
                        OPTIONAL
                        This is a metadata.
                        Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

                        BE: A value MAY NOT be returned for users with a Belgian ID document.
                        NL: A value SHALL always be returned for users with a Dutch ID document.
                        LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                        http://itsme.services/v2/
                        claim/IDDocumentSN
                        OPTIONAL
                        Returns the ID document number, represented as a string. If requested, a value SHALL always be returned for this claim:
                        BE: The BE eID number is a string with 12 digits in the form xxx-xxxxxxx-yy (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens.
                        NL: A 9-chars string with letters at positions 1 and 2, letters or digits in positions 3 to 8 and a digit at position 9. The letter ‘O’ is not used in the NL document numbers. The digit ‘0’ (zero) MAY be used.
                        LU: Format not documented.

                        http://itsme.services/v2/
                        claim/IDDocumentType
                        OPTIONAL
                        Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

                        If requested, a value SHALL always be returned for this claim.
                        http://itsme.services/v2/
                        claim/IDIssuingCountry
                        OPTIONAL
                        This is a metadata.
                        Returns the 3-letters iso code of the country that issued the identity document.

                        If requested, a value SHALL always be returned for this claim.
                        http://itsme.services/v2/
                        claim/issuance_locality
                        OPTIONAL
                        This is a metadata.
                        Returns the locality that issued the ID document used to create the itsme® account.

                        If requested, a value MAY NOT be returned for this claim.
                        http://itsme.services/v2/
                        claim/app
                        OPTIONAL
                        Returns a JSON object with 3 members: appInstalledDate contains the date when the app was installed on the user's device, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. appName contains the name of the app and appRelease contains a string identifying the release (example: "4.9.1").
                        This claim is intended to help partners detect fraudulent use cases.

                        If requested, a value SHALL always be returned for this claim.
                        http://itsme.services/v2/
                        claim/account
                        OPTIONAL
                        Returns a JSON object with 3 members: activationDate contains the date when the account was last activated (enrolled or unblocked), represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. activationMechanism contains a string identifying the way this account was created. Possible values are "CARD_READER" (enrollment via a physical reading of the ID document chip), "CONTACT_LESS" (enrollment via a NFC reading of the ID document) or "ID_PROVIDER" (enrollment via a trusted partner, i.e. a bank).
                        This claim is intended to help partners detect fraudulent use cases.

                        If requested, a value SHALL always be returned for this claim.
                        http://itsme.services/v2/
                        claim/transaction_ip
                        OPTIONAL
                        Returns the IP address of the smartphone approving the transaction.
                        This claim is intended to help partners detect fraudulent use cases.

                        If requested, a value SHALL always be returned for this claim.
                        request_uri
                        OPTIONAL
                        A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                        If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                        The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MUST contain the TCP port number 443. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
                        request
                        OPTIONAL
                        It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                        If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
                        code_challenge
                        OPTIONAL
                        A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
                        code_challenge_method
                        OPTIONAL
                        Code verifier transformation method.

                        It MUST be set to S256.

                        Response

                        302 application/x-www-form-urlencoded

                        code
                        An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

                        Note : the code has a lifetime of 3 minutes.
                        state
                        The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.

                        Example

                        • Request

                          GET /v2/authorization HTTP/1.1
                          +
                          • Requesting only the verificationDate will return nothing, as it only returns values for other requested attributes.

                          • The validityTo metadata only has a value for BEeidSn and IDDocumentSN (because other attributes don’t have an expiry date). So validityTo will only return a value if BEeidSn and/or IDDocumentSN is also requested. Even if other attributes are requested, validityTo will not return a value for those other attributes.

                          API reference

                          itsme® Discovery Document

                          • GET https://idp.[e2e/prd].itsme.services/v2/.well-known/openid-configuration

                            To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                            Authorization, Token and userInfo Endpoints Supported claims ...
                          • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/.well-known/openid-configuration

                            To simplify implementations and increase flexibility, OpenID Connect allows the use of a Discovery Document, a JSON document containing key-value pairs which provide details about itsme® configuration, such as the

                            Authorization, Token and userInfo Endpoints Supported claims ...

                          Authorization Request

                          • GET https://idp.[e2e/prd].itsme.services/v2/authorization

                          • GET https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/authorize

                          Parameters

                          client_id
                          REQUIRED
                          It identifies your application. This parameter value is generated during registration.
                          response_type
                          REQUIRED
                          This defines the processing flow to be used when forming the response. Because itsme® supports the Authorization Code Flow, this value MUST be code.
                          scope
                          REQUIRED
                          It allows your application to express the desired scope of the access request. Each scope returns a set of user attributes. The scopes an application should request depend on which user attributes your application needs. Once the user authorizes the requested scopes, his details are returned in an ID Token and are also available through the UserInfo Endpoint.

                          All scope values must be space-separated.

                          The basic (and required) scopes are openid and service. Beyond that, your application can ask for additional standard scopes values which map to sets of related claims are: profile email address phone eid
                          service
                          REQUIRED
                          It indicates the itsme® service your application intends to use, e.g. service:TEST_code by replacing "TEST_code" with the service code generated during registration.
                          openid
                          REQUIRED
                          It indicates that your application intends to use the OpenID Connect protocol to verify a user's identity by returning a sub claim which represents a unique identifier for the authenticated user.
                          profile
                          OPTIONAL
                          Returns claims that represent basic profile information, specifically family_name, given_name, name, gender, locale, picture and birthdate.

                          If requested, a value SHALL always be returned for the above claims except for the given_name claim which MAY NOT be returned if the user doesn't have any first name(s).
                          email
                          OPTIONAL
                          Returns the email claim, which contains the user's email address, and email_verified, which is a boolean indicating whether the email address was verified by the user.

                          If requested, a value SHALL always be returned for the email_verified claim only if email claim is filled with a value, whereas the email claim SHALL always be returned only if the user gave us an email address.
                          address
                          OPTIONAL
                          Returns user's postal address, represented as JSON Object containing some or all of these members formatted street_address postal_code locality

                          If requested, a value SHALL always be returned for users with a Belgian ID document, and SHALL NOT be returned for users with a Dutch ID documents.
                          phone
                          OPTIONAL
                          Returns the phone_number claim, which contains the user's phone number, and phone_number_verified, which is a boolean indicating whether the phone number was verified by the user.

                          If requested, a value SHALL always be returned for the above claims.
                          eid
                          OPTIONAL
                          Returns the http://itsme.services/v2/claim/BENationalNumber claim, which contains the unique identification number of natural persons who are registered in Belgium, and http://itsme.services/v2/claim/BEeidSn, which is a string indicating the Belgian ID card number.

                          If requested, a value SHALL always be returned for the above claims.
                          redirect_uri
                          REQUIRED
                          It is the URL to which users are redirected once the authentication is complete.

                          The following restrictions apply to redirect URIs: The redirect URI MUST match the value preregistered during the registration. The redirect URI MUST begin with the scheme https (refer to this section for more information). There is an exception for localhost redirect URIs that are only permitted for development purposes, it’s not for use in production. The redirect URI SHALL NOT be a custom URL. The fragment identifier introduced by a hash mark # SHALL NOT be used. The redirect URI is case-sensitive. Its case MUST match the case of the URL path of your running application. For example, if your application includes as part of its path .../abc/response-oidc, do not specify .../ABC/response-oidc in the redirect URI. Because the web browser treats paths as case-sensitive, cookies associated with .../abc/response-oidc MAY be excluded if redirected to the case-mismatched .../ABC/response-oidc URL. If relevant (in case you have a mobile app) make sure that your redirect URIs support the Universal links and App links mechanism. Functionally, it will allow you to have only one single link that will either open your desktop web application, your mobile app or your mobile site on the User’s device. Universal links and App links are standard web links (http://mydomain.com) that point to both a web page and a piece of content inside an app. When a Universal Link is opened, the app OS checks to see if any installed app is registered for that domain. If so, the app is launched immediately without ever loading the web page. If not, the web URL is loaded into the webbrowser.
                          state
                          Strongly RECOMMENDED
                          Specifies any string value that your application uses to maintain state between your Authorization Request and the Authorization Server's response. You can use this parameter for several purposes, such as directing the user to the correct resource in your application and mitigating cross-site request forgery.
                          nonce
                          Strongly RECOMMENDED
                          A string value used to associate a session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authorization Request to the ID Token.
                          ui_locales
                          OPTIONAL
                          Indicates the user's preferred languages for the itsme® sign-in page, represented as a space-separated list of language tag values, ordered by preference.

                          Possible values : fr nl de en
                          display
                          OPTIONAL
                          Specify how the itsme® sign-in page should be displayed to the user. Currently, only the page value is supported but in the future we might support additional display modes like touch.
                          acr_values
                          OPTIONAL
                          Indicates the authentication method required to process the request, represented as a space-separated list of tag values, ordered by preference.

                          Possible values : http://itsme.services/v2/claim/acr_basic http://itsme.services/v2/claim/acr_advanced

                          Note : if these two values are provided only the most constraining authentication method will be applied, e.g. http://itsme.services/v2/claim/acr_advanced.
                          http://itsme.services/v2/
                          claim/acr_basic
                          It lets the user to choose either fingerprint usage (if device is compatible) or itsme® code. If the acr_values parameter is not specified, this is the default authentication method.
                          http://itsme.services/v2/
                          claim/acr_advanced
                          It forces the user to use his itsme® code.
                          claims
                          OPTIONAL
                          Allows to request specific user's details ("claims"). You can choose to receive those claims either in the ID Token (from /token endpoint) or in the UserInfo object (from /userinfo endpoint).
                          It MUST be a JSON object containing an {"id_token":{...}} member or a {"userinfo":{...}} member respectively. This member will then contain all the desired claims - see example below.
                          Note: to avoid the need of a /userinfo request, itsme® recommends to retrieve the claims directly from the ID Token.

                          Supported claims are listed below.
                          name
                          OPTIONAL
                          Returns user's full name in displayable form including all name parts, possibly including titles and suffixes.

                          If requested, a value SHALL always be returned for this claim.
                          given_name
                          OPTIONAL
                          Returns user's given name(s) or first name(s). Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.

                          If requested, a value MAY NOT be returned if the user doesn't have any first name(s).
                          family_name
                          OPTIONAL
                          Returns user's surname(s) or last name(s). Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.

                          If requested, a value SHALL always be returned for this claim.
                          birthdate
                          OPTIONAL
                          Return user's birthdate, represented as a string in YYYY-MM-DD date format. itsme® users are always 16 years old or more.

                          BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate_as_string claim: at least one of the 2 SHALL return a value.
                          NL: A value SHALL always be returned for users with a Dutch ID document.
                          LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/claim/birthdate_as_string
                          OPTIONAL
                          Returns user's birthdate in an unprocessed way, as mentioned on the ID document. itsme® users are always 16 years old or more.

                          BE: A value MAY NOT be returned for users with a Belgian ID document. It forms a pair with the birthdate claim: at least one of the 2 SHALL return a value.
                          NL: A value SHALL NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                          gender
                          OPTIONAL
                          Returns user's gender. Possible values are : female male unknown n/a

                          BE: A value SHALL always be returned for users with a Belgian ID document. Belgian accounts can only be female or male
                          NL: A value MAY NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                          locale
                          OPTIONAL
                          Returns user's mobile phone language, represented as a string format. Possible values are : NL FR DE EN

                          If requested, a value MAY NOT be returned for this claim.
                          picture
                          OPTIONAL
                          Returns user's ID picture, represented as a URL string. This URL refers to an image file (for example, a JPEG, JPEG2000, or PNG image file). This image is the raw (unprocessed) image contained on the ID document.

                          BE: A value MAY NOT be returned for users with a Belgian ID document.
                          NL: A value SHALL always be returned for users with a Dutch ID document.
                          LU: A value SHALL always be returned for users with a Luxembourgish ID document.

                          Accessing this URL has to be done with your bearer token. Example:
                          GET /v2/picture HTTP/1.1
                          Host: idp.prd.itsme.services
                          Authorization: Bearer SlAV32hkKG
                          http://itsme.services/v2/
                          claim/physical_person_photo
                          OPTIONAL
                          Returns user's ID picture, represented as a JSON Object containing these members:
                          format: the MIME type
                          value: the base64 encoded image.

                          This picture is read from the ID document but converted to always return a 200x140 px, 24 BPP JPEG image.

                          BE: A value MAY NOT be returned for users with a Belgian ID document.
                          NL: A value SHALL always be returned for users with a Dutch ID document.
                          LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                          email
                          OPTIONAL
                          Returns user's email address.

                          If requested, a value MAY NOT be returned.
                          email_verified
                          OPTIONAL
                          Returns true if the user's e-mail address is verified; otherwise false.

                          Note : currently, itsme® always returns false for this claim because the email verification feature is not yet implemented in our systems.

                          If requested, a value SHALL NOT be returned if the email claim is not filled with a value.
                          phone_number
                          OPTIONAL
                          Returns user's phone number, represented as a string format. For example : [+][country code] [subscriber number including area code].

                          If requested, a value SHALL always be returned for this claim.
                          phone_number_verified
                          OPTIONAL
                          Returns true if the user's phone number is verified; otherwise false.

                          If requested, a value SHALL always be returned for this claim.
                          Note: currently, all phone numbers are verified so this claims always returns true.
                          address
                          OPTIONAL
                          Returns user's postal address, represented as JSON Object containing some or all of these members: formatted street_address postal_code locality.

                          BE: A value SHALL always be returned for users with a Belgian ID document.
                          NL: A value SHALL NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/claim_citizenship
                          OPTIONAL
                          Returns user's nationality. The format is directly depending on the underlying ID document: for Belgian ID documents this is represented as a string, and for Dutch or Lux ID documents this is represented in the ISO 3166-1 alpha-3 format.

                          If requested, a value SHALL always be returned for this claim.
                          http://itsme.services/v2/
                          claim/claim_citizenship_as_iso
                          OPTIONAL
                          Returns user's nationality. The format is always ISO 3166-1 alpha-3.

                          BE: Please be aware that this claim is computed by itsme® for users with a Belgian ID document on a best effort basis. For the original value as stored on the ID document, see http://itsme.services/v2/claim/claim_citizenship above. Therefore, a value MAY NOT be returned for users with a Belgian ID document.
                          NL: A value SHALL always be returned for users with a Dutch ID document.
                          LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/place_of_birth
                          OPTIONAL
                          Returns user's place of birth, represented as a JSON Object containing some or all of these members formatted city country.

                          BE: A value MAY NOT be returned for users with a Belgian ID document.
                          NL: A value SHALL NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/BEeidSn
                          OPTIONAL
                          Returns user's Belgian ID document number, represented as a string with 12 digits in the form xxx-xxxxxxx-yy. (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens. This claim is made redundant by the IDDocumentSN claim below which we advise to use instead.

                          BE: A value SHALL always be returned for users with a Belgian ID document.
                          NL: A value SHALL NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/claim_device
                          OPTIONAL
                          Returns user's phone information, represented as a JSON Object containing some or all of these members os appName appRelease deviceLabel debugEnabled deviceID osRelease manufacturer deviceLockLevel smsEnabled rooted msisdn deviceModel sdkRelease.

                          If requested, a value MAY NOT be returned for this claim.
                          http://itsme.services/v2/
                          claim/transaction_info
                          OPTIONAL
                          Returns information about the itsme® transaction, represented as a JSON Object containing some or all of these members securityLevel bindLevel appRelease.

                          If requested, a value MAY NOT be returned for this claim.
                          http://itsme.services/v2/
                          claim/BENationalNumber
                          OPTIONAL
                          Returns user's Belgian unique identification number, represented as a string with 11 digits in the form YY.MM.DD-xxx.cd where YY.MM.DD is the birthdate of the person, xxx a sequential number (odd for males and even for females) and cd a check-digit. Some exceptions could apply.

                          BE: A value SHALL always be returned for users with a Belgian ID document.
                          NL: A value SHALL NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/validityFrom
                          OPTIONAL
                          This is a metadata.
                          Returns user's Belgian ID document issuance date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.
                          BE: A value MAY NOT be returned for users with a Belgian ID document.
                          NL: A value SHALL NOT be returned for users with a Dutch ID document.
                          LU: A value SHALL NOT be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/validityTo
                          OPTIONAL
                          This is a metadata.
                          Returns user's Belgian ID card expiry date, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. Can only be returned in combination with claim http://itsme.services/v2/claim/BEeidSn.

                          If requested, a value MAY NOT be returned for users with a Belgian ID document, and MAY NOT be returned for users with a Dutch ID document.
                          http://itsme.services/v2/
                          claim/verificationDate
                          OPTIONAL
                          This is a metadata.
                          Returns the date when the user's document was read for the last time, represented as a string in YYYY-MM-DDThh:mm:ss date format specified by ISO 8601.

                          BE: A value MAY NOT be returned for users with a Belgian ID document.
                          NL: A value SHALL always be returned for users with a Dutch ID document.
                          LU: A value SHALL always be returned for users with a Luxembourgish ID document.
                          http://itsme.services/v2/
                          claim/IDDocumentSN
                          OPTIONAL
                          Returns the ID document number, represented as a string. If requested, a value SHALL always be returned for this claim:
                          BE: The BE eID number is a string with 12 digits in the form xxx-xxxxxxx-yy (the check-number yy is the remainder of the division of xxxxxxxxxx by 97) for Belgian citizens, or starting with a letter and nine digits in the form B xxxxxxx xx for EU/EEA/Swiss citizens.
                          NL: A 9-chars string with letters at positions 1 and 2, letters or digits in positions 3 to 8 and a digit at position 9. The letter ‘O’ is not used in the NL document numbers. The digit ‘0’ (zero) MAY be used.
                          LU: Format not documented.

                          http://itsme.services/v2/
                          claim/IDDocumentType
                          OPTIONAL
                          Returns the ID document type. This is a 1 or 2 characters code defined by the ICAO. Identity cards have a code with first letter I while passports have a code starting with P.

                          If requested, a value SHALL always be returned for this claim.
                          http://itsme.services/v2/
                          claim/IDIssuingCountry
                          OPTIONAL
                          This is a metadata.
                          Returns the 3-letters iso code of the country that issued the identity document.

                          If requested, a value SHALL always be returned for this claim.
                          http://itsme.services/v2/
                          claim/issuance_locality
                          OPTIONAL
                          This is a metadata.
                          Returns the locality that issued the ID document used to create the itsme® account.

                          If requested, a value MAY NOT be returned for this claim.
                          http://itsme.services/v2/
                          claim/app
                          OPTIONAL
                          Returns a JSON object with 3 members: appInstalledDate contains the date when the app was installed on the user's device, represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. appName contains the name of the app and appRelease contains a string identifying the release (example: "4.9.1").
                          This claim is intended to help partners detect fraudulent use cases.

                          If requested, a value SHALL always be returned for this claim.
                          http://itsme.services/v2/
                          claim/account
                          OPTIONAL
                          Returns a JSON object with 3 members: activationDate contains the date when the account was last activated (enrolled or unblocked), represented as a string in YYYY-MM-DDThh:mm:ss.nnnZ date format specified by ISO 8601. activationMechanism contains a string identifying the way this account was created. Possible values are "CARD_READER" (enrollment via a physical reading of the ID document chip), "CONTACT_LESS" (enrollment via a NFC reading of the ID document) or "ID_PROVIDER" (enrollment via a trusted partner, i.e. a bank).
                          This claim is intended to help partners detect fraudulent use cases.

                          If requested, a value SHALL always be returned for this claim.
                          http://itsme.services/v2/
                          claim/transaction_ip
                          OPTIONAL
                          Returns the IP address of the smartphone approving the transaction.
                          This claim is intended to help partners detect fraudulent use cases.

                          If requested, a value SHALL always be returned for this claim.
                          request_uri
                          OPTIONAL
                          A URL using the https scheme referencing a resource containing a JWT whose claims are the request parameters. The request_uri parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                          If the request_uri parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                          The following restrictions apply to request URIs: The request URI MUST be preregistered during the registration. The request URI MUST contain the TCP port number 443. Example : https://test.istme.be:443/p/test The request URI MUST begin with the scheme https (refer to this section for more information). The usage of localhost request URIs that are not permitted. The request URI JWT MUST be publicly accessible.
                          request
                          OPTIONAL
                          It represents the request as a JWT whose Claims are the request parameters. The request parameter is used to secure parameters in the Authorization Request from tainting or inspection when sending the request to the itsme® Authorization Endpoint.

                          If the request parameter is used, the JWT MUST be signed and MUST contain the claims iss (issuer) and aud (audience) as members. The iss value SHOULD be your client_id. The aud value SHOULD be set to https://idp.[e2e/prd].itsme.services/v2/authorization. The JWT MUST also be encrypted and more precisely: it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).
                          code_challenge
                          OPTIONAL
                          A challenge derived from the code verifier by applying a S256 hash. This parameter is REQUIRED if you requested PKCE to be enforced.
                          code_challenge_method
                          OPTIONAL
                          Code verifier transformation method.

                          It MUST be set to S256.

                          Response

                          302 application/x-www-form-urlencoded

                          code
                          An intermediate opaque credential of 36 characters used to retrieve the ID Token and Access Token.

                          Note : the code has a lifetime of 3 minutes.
                          state
                          The string value provided in the Authorization Request. You SHOULD validate that the value returned matches the one supplied.

                          Example

                          • Request

                            GET /v2/authorization HTTP/1.1
                             Host: server.example.com
                             
                             response_type=code
                            @@ -91,7 +91,7 @@
                             Location: https://client.example.org/cb?
                               code=SplxlOBeZQQYbYS6WxSbIA
                               &state=af0ifjsldkj
                            -

                          Token Request

                          • POST https://idp.[e2e/prd].itsme.services/v2/token

                            To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the public- and private-key pair method.

                            Parameters

                            grant_type
                            REQUIRED
                            Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID token and access token.
                            code
                            REQUIRED
                            The intermediate opaque credential received in the Authorization Response.
                            redirect_uri
                            REQUIRED
                            It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                            code_verifier
                            OPTIONAL
                            High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.
                            client_assertion_type
                            REQUIRED
                            Specifies the type of assertion. Set this to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
                            client_assertion
                            REQUIRED
                            Is a set of identity and security information, in the form of a JWT, used as an authentication method. To ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code, the JWT MUST be signed, and MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                            The JWT contains the following claims.
                            iss
                            REQUIRED
                            The issuer of the token. This value MUST be the same as the client_id.
                            sub
                            REQUIRED
                            The subject of the token. This value MUST be the same as the client_id.
                            aud
                            REQUIRED
                            The full URL of the resource you're using the JWT to authenticate to. Set this to https://idp.[e2e/prd].itsme.services/v2/token.
                            jti
                            REQUIRED
                            An unique identifier for the token, containing maximum 255 characters.
                            exp
                            REQUIRED
                            The expiration time of the token in seconds since January 1, 1970 UTC.
                            iat
                            OPTIONAL
                            The time at which the JWT was issued.

                            Response

                            200 application/json

                            access_token
                            Allows an application to retrieve consented user information from the UserInfo Endpoint.
                            token_type
                            Provides your application with the information required to successfully utilize the access token. Returned value is Bearer..
                            id_token
                            A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).
                          • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/token

                            To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the secret key method.

                            Parameters

                            grant_type
                            REQUIRED
                            Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID koken and access token.
                            client_id
                            REQUIRED
                            It identifies your application. This parameter value is generated during registration.
                            code
                            REQUIRED
                            The intermediate opaque credential received in the Authorization Response.
                            redirect_uri
                            REQUIRED
                            It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                            client_secret
                            REQUIRED
                            Contains the a key you reveiced when registering your application. This ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code.
                            code_verifier
                            OPTIONAL
                            High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.

                            Response

                            200 application/json

                            access_token
                            Allows an application to retrieve consented user information from the UserInfo Endpoint.
                            token_type
                            Provides your application with the information required to successfully utilize the access token. Returned value is Bearer.
                            id_token
                            A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).

                          Example

                          • Request

                            POST /token HTTP/1.1
                            +

                          Token Request

                          • POST https://idp.[e2e/prd].itsme.services/v2/token

                            To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the public- and private-key pair method.

                            Parameters

                            grant_type
                            REQUIRED
                            Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID token and access token.
                            code
                            REQUIRED
                            The intermediate opaque credential received in the Authorization Response.
                            redirect_uri
                            REQUIRED
                            It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                            code_verifier
                            OPTIONAL
                            High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.
                            client_assertion_type
                            REQUIRED
                            Specifies the type of assertion. Set this to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
                            client_assertion
                            REQUIRED
                            Is a set of identity and security information, in the form of a JWT, used as an authentication method. To ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code, the JWT MUST be signed, and MAY also be encrypted. If both signing and encryption are performed, it MUST be signed then encrypted, with the result being a Nested JWT (refer to this page for more information).

                            The JWT contains the following claims.
                            iss
                            REQUIRED
                            The issuer of the token. This value MUST be the same as the client_id.
                            sub
                            REQUIRED
                            The subject of the token. This value MUST be the same as the client_id.
                            aud
                            REQUIRED
                            The full URL of the resource you're using the JWT to authenticate to. Set this to https://idp.[e2e/prd].itsme.services/v2/token.
                            jti
                            REQUIRED
                            An unique identifier for the token, containing maximum 255 characters.
                            exp
                            REQUIRED
                            The expiration time of the token in seconds since January 1, 1970 UTC.
                            iat
                            OPTIONAL
                            The time at which the JWT was issued.

                            Response

                            200 application/json

                            access_token
                            Allows an application to retrieve consented user information from the UserInfo Endpoint.
                            token_type
                            Provides your application with the information required to successfully utilize the access token. Returned value is Bearer..
                            id_token
                            A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).
                          • POST https://oidc.[e2e/prd].itsme.services/clientsecret-oidc/csapi/v0.1/connect/token

                            To assert the identity of the user, the code received previously needs to be exchanged for an ID token and access token. During this step, your application has to authenticate itself to our server using the secret key method.

                            Parameters

                            grant_type
                            REQUIRED
                            Set this to authorization_code to tell the Token Endpoint that your application wants to exchange an authorization code for an ID koken and access token.
                            client_id
                            REQUIRED
                            It identifies your application. This parameter value is generated during registration.
                            code
                            REQUIRED
                            The intermediate opaque credential received in the Authorization Response.
                            redirect_uri
                            REQUIRED
                            It is the URL to which users are redirected once the authentication is complete. It MUST match the value used in the Authorization Request.
                            client_secret
                            REQUIRED
                            Contains the a key you reveiced when registering your application. This ensures that the request to get the id token and access token is made only from your application, and not from a potential attacker that may have intercepted the authorization code.
                            code_verifier
                            OPTIONAL
                            High-entropy cryptographic random string using the unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", with a minimum length of 43 characters and a maximum length of 128 characters. This parameter is REQUIRED if you required PKCE to be enforced.

                            Response

                            200 application/json

                            access_token
                            Allows an application to retrieve consented user information from the UserInfo Endpoint.
                            token_type
                            Provides your application with the information required to successfully utilize the access token. Returned value is Bearer.
                            id_token
                            A security token that contains information about the authentication of an user, and potentially other requested claim data's. The id_token value is represented as a signed and encrypted JWT. So, before being able to use the ID Token claims you will have to decrypt and verify the signature (refer to this page for more information).

                          Example