Naslag

API reference

Autorisatie

De Identity Federation-dienst van Cleverbase gebruikt OAuth 2.0 voor autorisatie.

GET /oauth2/authorize

Omschrijving

Start de OAuth 2.0-autorisatieserver met een Authorization Code flow, zoals beschreven in sectie 1.3.1 van RFC 6749.
De autorisatie komt terug als authorization code, die de client vervolgens MOET gebruiken om met de methode oauth2/token een access token (en id_token) op te halen.

Input parameters

ParameterAanwezigheidWaardeOmschrijving
response_typeREQUIREDStringMoet altijd "code" zijn.
client_idREQUIREDStringUnieke client identifier.
redirect_uriOPTIONALStringDe URL waarnaar na het autorisatieproces wordt teruggestuurd (standaard de geregistreerde redirect).
scopeREQUIREDStringDoor spaties gescheiden reeks. Moet "openid" bevatten. Mag aanvullende scopes bevatten, zoals "com.cleverbase.proof" en "email".
stateREQUIREDStringMaximaal 255 bytes aan willekeurige gegevens van de client, die ongewijzigd terugkomen op de redirect-URI.
nonceOPTIONALStringReeks waarmee een clientsessie aan een ID token wordt gekoppeld, om replay-aanvallen tegen te gaan.
ui_localesOPTIONALStringDe talen en schriften die de eindgebruiker voor de UI verkiest, volgens RFC5646. Engels en Nederlands worden ondersteund. Zonder deze waarde, of bij een niet-ondersteunde taal, is Nederlands de standaard.

Antwoord

ParameterAanwezigheidWaardeOmschrijving
codeREQUIREDStringDe authorization code die de autorisatieserver heeft gegenereerd
stateREQUIREDStringHoort overeen te komen met de state uit het verzoek
errorOPTIONALStringEén foutcode
error_descriptionOPTIONALStringLeesbare tekst met aanvullende informatie over de fout

Foutgevallen

De kolom hieronder bevat de tekst die de gebruiker te zien krijgt, en die blijft daarom onvertaald staan zoals hij is.

GevalGetoond aan de gebruikerErrorError description
ChallengeExpiredDe QR code is vervallen. De QR code heeft een beperkte levensduur. Probeer het nog een keer en scan het binnen de 10 minuten.access_deniedauthentication challenge expired
EmailUnverified'Uw email is niet geverifieerd', 'Activeer uw e-mail adres om verder te gaan. Om uw e-mail adres te valideren zoek naar "Verifieer je e-mailadres" in uw inbox en volg de instructies daar.'access_denieduser email is unverified
ConsentExpired'Pincode niet op tijd hebt ingevoerd', 'Wacht niet te lang om de pincode in te voeren, hier staat een tijdslimiet op.'access_deniedconsent request expired
ConsentRejected'U ging niet akkoord met het delen van uw gegevens'access_deniedResource owner rejected consent
ProcessExpired'Tijdslimiet bereikt', 'Deze handeling heeft een beperkte levensduur. Probeer het nog een keer en voer je pincode in binnen de 10 minuten.'access_deniedprocess expired
NonPkioCertificateKan niet verbinden met onze systemen. Er was een technisch probleem aan onze kant, probeer het nog een keer.server_errorn.v.t.
VerificationFailedKan niet verbinden met onze systemen. Er was een technisch probleem aan onze kant, probeer het nog een keer.server_errorn.v.t.
SystemErrorKan niet verbinden met onze systemen. Er was een technisch probleem aan onze kant, probeer het nog een keer.server_errorn.v.t.
ConsentInvalidatedKan niet verbinden met onze systemen. Er was een technisch probleem aan onze kant, probeer het nog een keer.server_errorn.v.t.
AuthenticationFailureKan niet verbinden met onze systemen. Er was een technisch probleem aan onze kant, probeer het nog een keer.server_errorn.v.t.

Voorbeelden

  • Verzoek met alleen de service-scope

    Minimaal verzoek voor alleen inloggen:

    GET /oauth2/authorize?
    response_type=code&
    client_id=<OAuth2_client_id>&
    redirect_uri=<OAuth2_redirect_uri>&
    scope=openid&
    lang=en-US&
    state=12345678&
    nonce=54321
  • Verzoek met uitgebreide scopes

    Met de IDF-scopes "openid email com.cleverbase.personal_info com.cleverbase.id_number":

    GET /oauth2/authorize?
    response_type=code&
    client_id=<OAuth2_client_id>&
    redirect_uri=<OAuth2_redirect_uri>&
    scope=openid email com.cleverbase.personal_info com.cleverbase.id_number&
    lang=en-US&
    state=12345678&
    nonce=54321
  • Antwoord met alleen de service-scope
    HTTP/1.1 302 Found
    Location: <OAuth2_redirect_uri>?
    code=FhkXf9P269L8g&
    state=12345678
  • Foutantwoord
    HTTP/1.1 302 Found
    Location: <OAuth2_redirect_uri>?error=invalid_request&
    error_description=Invalid%20Authorization%20Code

POST /oauth2/token

Omschrijving

Haal bij de autorisatieserver een OAuth 2.0 bearer access token en een ID token op, door de authorization code mee te sturen die de server na een geslaagde authenticatie teruggaf, samen met de gebruikte scope en het client-id en client secret die de clientapplicatie heeft.

Input parameters

ParameterAanwezigheidWaardeOmschrijving
grant_typeREQUIREDStringMoet altijd "authorization_code" zijn
codeREQUIREDStringDe code uit de stap oauth2/authorize
client_idREQUIREDStringUnieke client identifier (zie Vereisten)
redirect_uriREQUIREDStringDe URL waarnaar de gebruiker na het afronden van de autorisatie ging.

Input headers

ParameterAanwezigheidWaardeOmschrijving
AuthorizationREQUIREDStringMoet altijd Basic Auth zijn, bijvoorbeeld Basic Y2xpZW50SUQ6cGFzc3dvcmQ (de Base64-codering van CLIENT_ID:CLIENT_SECRET, volgens RFC 6749)

Antwoord

ParameterAanwezigheidWaardeOmschrijving
access_tokenREQUIREDStringHet kortlevende access token, te gebruiken afhankelijk van de scope van het OAuth 2.0-autorisatieverzoek.
expires_inOPTIONALIntDe levensduur van het service access token, in seconden.
id_tokenREQUIREDJWTHet ID token is een beveiligingstoken in JWT-vorm, met uitspraken over de authenticatie van een eindgebruiker door een autorisatieserver bij gebruik van een client. Het bevat ten minste de claim sub met de pairwise pseudonieme identiteit van de eindgebruiker. Je kunt het uitlezen met bijvoorbeeld jwt.io.
scopeREQUIREDStringDoor spaties gescheiden reeks met de scope waarvoor autorisatie is verleend.
token_typeREQUIREDStringMoet Bearer zijn

Voorbeelden

  • Voorbeeldverzoek
    POST /oauth2/token HTTP/1.1
    Authorization: Basic K3dfKT59SUD8gWghq1ghjuZ
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&
    code=<RESULT_FROM_/oauth2/authorize>&
    client_id=<OAuth2_client_id>&
    client_secret=<OAuth2_client_secret>&
    redirect_uri=<OAuth2_redirect_uri>
  • Voorbeeldantwoord

    Voorbeeld wanneer het oorspronkelijke verzoek aan oauth2/authorize alleen "openid" bevatte:

    {
      "access_token": "f0EigERuAYruavv2fwRc4ZJKn1x1Uef8ymarsCqKfJw...",
      "expires_in": 3600,
      "id_token": "<ID_TOKEN_JWT_CONTENT>",
      "scope": "openid",
      "token_type": "bearer"
    }

    Voorbeeld wanneer dat verzoek de scopes "openid email com.cleverbase.personal_info com.cleverbase.id_number" bevatte:

    {
      "access_token": "rxdF-27ehy4LFSUsh32gVDfN9QpdwqDu-3ZtbVsx5J8...",
      "expires_in": 3600,
      "id_token": "<ID_TOKEN_JWT_CONTENT>",
      "scope": "openid email com.cleverbase.personal_info com.cleverbase.id_number",
      "token_type": "bearer"
    }

Het ID token valideren

Clients MOETEN het ID token in het tokenantwoord valideren volgens OIDC hfst. 3.1.3.7.

Ontbrekende claims

Als een claim wel is opgevraagd maar niet gedeeld kan worden, valt het veld weg uit het id_token en uit het antwoord van userinfo, conform OpenID Connect Specification 3.3.3.6. Clients MOETEN er dus rekening mee houden dat niet alle opgevraagde claims in het id_token en het antwoord van userinfo aanwezig zijn.

Gebruikersinformatie

Het UserInfo-endpoint is een OAuth 2.0 Protected Resource die claims teruggeeft over de geauthenticeerde eindgebruiker. Om die claims op te halen doet de client een verzoek aan het UserInfo-endpoint met een access token dat via OpenID Connect-authenticatie is verkregen. De claims komen terug als JSON-object met naam-waardeparen.

Let op: wordt dit endpoint voor IDF gebruikt, dan zijn de optionele scopes nodig. Anders komt alleen een pairwise pseudonieme identifier voor de natuurlijke persoon terug. Zie scopes en claims voor de details.

Let op

Deze functie werkt op dit moment alleen op de oude host "https://idf.acc.cleverbase.com".

Meer informatie: OpenID Connect.

GET /userinfo

Input headers

ParameterAanwezigheidWaardeOmschrijving
AuthorizationREQUIREDStringMoet altijd van het type Bearer zijn, verkregen uit de OAuth-flow met de scope "openid". Bijvoorbeeld: Bearer 4/CKN69L8gdSYp5_pwH3XlFQZ3ndFhkXf9P2_TiHRG-bA

Antwoord

ParameterAanwezigheidWaardeOmschrijving
subREQUIREDStringSubject: identifier voor de eindgebruiker bij de issuer.
com.cleverbase.proofOPTIONALJSONEen JSON-array van JSON-objecten met de velden id, content_type en base64_encoded_content. De relying party hoort de inhoud te archiveren, samen met de identifier en het opgegeven content type.
com.cleverbase.last_nameOPTIONALStringAchternaam van de eindgebruiker, zoals in het identiteitsdocument.
given_nameOPTIONALStringVoornaam of voornamen van de eindgebruiker, zoals in het identiteitsdocument.
birthdateOPTIONALStringGeboortedatum van de eindgebruiker, zoals in het identiteitsdocument.
com.cleverbase.birthplaceOPTIONALStringGeboorteplaats van de eindgebruiker, zoals in het identiteitsdocument.
com.cleverbase.nationalityOPTIONALStringNationaliteit van de eindgebruiker, zoals in het identiteitsdocument.
com.cleverbase.document.typeOPTIONALStringHet documenttype waarmee de eindgebruiker zich heeft geïdentificeerd.
com.cleverbase.id_numberOPTIONALStringUniek nummer van het identiteitsdocument dat bij de registratie is gebruikt.
emailOPTIONALStringHet e-mailadres van voorkeur van de eindgebruiker.
email_verifiedOPTIONALBooleanTrue als het e-mailadres van de eindgebruiker geverifieerd is.
com.cleverbase.nl_brp_voornaamOPTIONALStringVoornaam volgens de regels van de BRP.
com.cleverbase.nl_brp_voorvoegselOPTIONALStringVoorvoegsel volgens de regels van de BRP.
com.cleverbase.nl_brp_geslachtsnaamOPTIONALStringGeslachtsnaam volgens de regels van de BRP.
com.cleverbase.nl_brp_geslachtsnaam_zonder_voorvoegselOPTIONALStringGeslachtsnaam zonder voorvoegsel, volgens de regels van de BRP.
com.cleverbase.id_document_issuance_dateOPTIONALStringDatum van afgifte van het identiteitsdocument.
com.cleverbase.id_document_issuance_placeOPTIONALStringPlaats van afgifte van het identiteitsdocument.
com.cleverbase.id_document_expiration_dateOPTIONALStringVervaldatum van het identiteitsdocument, als ISO 8601-datum (YYYY-MM-DD).
audREQUIREDStringAudience: voor wie of wat het token bedoeld is
auth_timeREQUIREDIntHet moment van authenticatie, als Unix-tijdstempel
iatREQUIREDIntHet moment waarop het token is uitgegeven, als Unix-tijdstempel
issREQUIREDStringIssuer: wie dit token heeft gemaakt en ondertekend
ratREQUIREDIntOnbekend, als Unix-tijdstempel

Voorbeeldverzoek

GET /userinfo HTTP/1.1
Authorization: Bearer 4/CKN69L8gdSYp5_pwH3XlFQZ3ndFhkXf9P2_TiHRG-bA
Content-Type: application/json

Voorbeeldantwoord

Voorbeeld wanneer het oorspronkelijke verzoek aan oauth2/authorize alleen de scope "openid" bevatte (dus alleen inloggen):

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "aud": [
        <client_id>
    ],
    "auth_time": 1650458268,
    "iat": 1650458274,
    "iss": "https://esign.acc.cleverbase.com/",
    "rat": 1650458253,
    "sub": "bf70e2da-feff-4c6b-86c2-47eda199ab30"
}

Voorbeeld wanneer dat verzoek de scopes "openid email com.cleverbase.personal_info com.cleverbase.id_number" bevatte:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "aud": [
        <client_id>
    ],
    "auth_time": 1650459478,
    "birthdate": "1990-12-22",
    "com.cleverbase.birthplace": "Rome",
    "com.cleverbase.document.type": "NLD_PASSPORT",
    "com.cleverbase.id_number": "XWN75IM16",
    "com.cleverbase.last_name": "De Bruijn",
    "com.cleverbase.nationality": "NLD",
    "email": "demo.acc.190422.102459@cleverbase.com",
    "email_verified": true,
    "given_name": "Willeke Liselotte",
    "iat": 1650459485,
    "iss": "https://esign.acc.cleverbase.com/",
    "rat": 1650459462,
    "sub": "bf70e2da-feff-4c6b-86c2-47eda199ab30"
}