Aanmelden

Gedetailleerde beschrijving van het aanvragen van een Authorization Code en tokens via de Authorization Code Flow

Authorization Code opvragen bij het Authorization Endpoint

Het Authenticatie Request wordt gestuurd naar het Authorization Endpoint: de URL hiervoor kan teruggevonden worden op de Discovery URL.

Volgende parameters worden als query parameters meegestuurd:

Parameter Omschrijving
client_id VERPLICHT ClientID (zoals gekend op de ACM IDP)
redirect_uri VERPLICHT redirect URI waarnaar de Authorization Code gestuurd zal worden: deze moet op voorhand gedefinieerd worden op de OpenID Connect Provider: deze wordt URL-encoded
response_type VERPLICHT geeft aan welke flow er gevolgd wordt en het gedrag voor het terugsturen van tokens: in ons geval MOET dit steeds “code” zijn
scope VERPLICHT de scope “openid” moet minimaal aanwezig zijn. Andere scope waarden zijn optioneel en enkel de claims die horen bij de aangevraagde scopes zullen uitgeleverd worden. Check het integratiedossier wat voorzien werd. Meerdere scopes worden door een spatie gescheiden en nadien URL-encoded
state OPTIONEEL AANBEVOLEN een waarde die de status bewaart tussen het request en de callback: dit kan enerzijds gebruikt worden als bescherming tegen Cross-Site Request Forgery (CSRF, XSRF): dit kan door de waarde van deze parameter cryptografisch te koppelen aan een browser cookie. Anderzijds kan dit gebruikt worden als een sessie-status: in dat geval zou dit dan een waarde moeten zijn waar niets uit op te maken is waarvan de integriteit door de toepassing gevalideerd kan worden. (bvb geen links of parameters gebruiken)
nonce OPTIONEEL AANBEVOLEN een waarde om een Client Sessie te koppelen aan het ID-token om “replay attacks” te mitigeren. De waarde die meegestuurd wordt in het Authenticatie Request wordt ongewijzigd terug gestuurd in het ID-token. Voorzie voldoende entropie voor deze waarde om te vermijden dat aanvallers de waarde kunnen raden
response_mode OPTIONEEL bepaalt de methode via de welke de Authorization Code teruggestuurd wordt: zie de details omtrent response_mode
acr_values OPTIONEEL de gevraagde “Authentication Context Class Reference” waarden: zie de details omtrent de authenticatiemiddelen
acr OPTIONEEL zorgt ervoor dat de geselecteerde “Authentication Context Class Reference” (zijnde de URN van het gekozen authenticatiemiddel) zal meegestuurd worden in de “acr” claim van het ID-token: zie de details omtrent de authenticatiemiddelen
login_hint OPTIONEEL de suggestie qua identiteit waarmee de gebruiker zich wenst aan te melden: zie de details omtrent de gericht aanmelden

Voorbeeld van een Authenticatie Request:

GET /op/v1/auth?
  client_id=28358814-5c20-4c13-bbff-db5dd8c4ae93&
  redirect_uri=https%3A%2F%2Fmijntoepassing.vlaanderen.be%2Fcallback&
  response_type=code&
  scope=openid%20vo%20profile&
  state=Fheue34eg2hjsdehfk839ed83azz&
  nonce=FJEkzudnsiz34kzlDzl82pzod21sjsy922jdSaq&
  acr_values=urn:be:vlaanderen:authmech:itsme%20urn:be:vlaanderen:authmech:eid%20urn:be:vlaanderen:authmech:csamtotp HTTP/1.1
Host: authenticatie.vlaanderen.be

Na een succesvolle authenticatie stuurt het Authorization Endpoint een Authorization Code terug naar de redirect URL.

Voorbeeld van het uitleveren van een Authorization Code:

GET /callback?
  code=OV9FU_1lxJoAbc&
  state=Fheue34eg2hjsdehfk839ed83azz HTTP/1.1
Host: mijntoepassing.vlaanderen.be

Tokens opvragen bij het Token Endpoint

De Client zal nu de Authorization Code bij het Token Endpoint inwisselen voor de verschillende tokens: dit dient binnen de 30 seconden te gebeuren aangezien de Authorization Code slechts zo lang geldig is. De URL voor het Token Endpoint kan teruggevonden worden op de Discovery URL.

Parameter Omschrijving
grant_type VERPLICHT Waarde die verplicht “authorization_code” is
code VERPLICHT de code die van de Authorization Server werd bekomen
client_id VERPLICHT ClientID
redirect_uri VERPLICHT redirect URI

Voorbeeld van een Token Request:

POST /op/v1/token HTTP/1.1
Host: authenticatie.vlaanderen.be
Content-Type: application/x-www-form-urlencoded

  client_id=28358814-5c20-4c13-bbff-db5dd8c4ae93&
  client_secret=CgNjSBQwSolxUcFe7A0U-16j7uccp34-Z5eigKOoCpn5WMHjcb0IkseYA8zhMdYKlpzNJh4Qj4OhjvkVEXq6clvKlutFv5H&
  code=OV9FU_1lxJoAbc&
  grant_type=authorization_code&
  redirect_uri=https%3A%2F%2Fmijntoepassing%2Fcallback

In dit voorbeeld gebeurt de Client authenticatie via het doorsturen van POST parameters: hiervoor bestaan echter meerdere opties.

Na de ontvangst en validatie van een geldig en geautoriseerd Token Request van de Client, stuurt ACM IDP een succesvolle respons dat een Access Token en een ID-token bevat.

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
    {
    "token_type": "Bearer",
    "access_token": "-OYFUnq0TieWrbD5LOBsb2D3RdlsnCLDJ9nx11jHaCa",
    "expires_in": 3600,
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhY3IiOiJ1cm46YmU6dmxhYW5kZXJlbjphdXRobWVjaDpjc2FtdG90cCIsImF0X2hhc2giOiJGRTMxYlNSRThaMmQzcnVVTzFYczVBIiwiYXVkIjoiMjgzNTg4MTQtNWMyMC00YzEzLWJiZmYtZGI1ZGQ4YzRhZTkzIiwiYXpwIjoiMjgzNTg4MTQtNWMyMC00YzEzLWJiZmYtZGI1ZGQ4YzRhZTkzIiwiZXhwIjoxNTkzMDQ0MDMxLCJmYW1pbHlfbmFtZSI6IkRvZSIsImdpdmVuX25hbWUiOiJKb2huIiwiaWF0IjoxNTkzMDM5MTY0LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aWUudmxhYW5kZXJlbi5iZS9vcCIsImtpZCI6Il9GSVFFSWVhTFEzQVFNV3JxMDIyZ2gxN01IamtJWUhNV293R2o1THhIVG8iLCJub25jZSI6IkZKRWt6dWRuc2l6MzRremxEemw4MnB6b2QyMXNqc3k5MjJqZFNhcSIsInN1YiI6IjIzNjU2MjFkYjE1YzZlMjg0NmNhNzFhMWYyNzc0ZTc5ZmcyOGM0ODciLCJ2b19kb2VsZ3JvZXBjb2RlIjoiRUEiLCJ2b19pZCI6ImE1NzIwNzQ2LTRjOWUtNDhhOC05YWEwLTdhYjQ1NjY0ODQ4NyIsImp0aSI6ImUyN2EwYmJjLTBlNGMtNDhjMS04OTZhLWY5NWMwMzAwNjQ2ZiJ9.X13FbycIRJpQpJqBEBm_gHrvk-P9DkPB7-bc2KVqQ6Y"
    }

Het Access Token is dus een “opaque” waarde en het ID-token is een JWT-token met een inhoud die er als volgt uit ziet:

{
  "acr": "urn:be:vlaanderen:authmech:csamtotp",
  "at_hash": "FE31bSRE8Z2d3ruUO1Xs5A",
  "aud": "28358814-5c20-4c13-bbff-db5dd8c4ae93",
  "azp": "28358814-5c20-4c13-bbff-db5dd8c4ae93",
  "exp": 1593042764,
  "family_name": "Doe",
  "given_name": "John",
  "iat": 1593039164,
  "iss": "https://authenticatie.vlaanderen.be/op",
  "kid": "_FIQEIeaLQ3AQMWrq022gh17MHjkIYHMWowGj5LxHTo",
  "nonce": "FJEkzudnsiz34kzlDzl82pzod21sjsy922jdSaq",
  "sub": "2365621db15c6e2846ca71a1f2774e79fg28c487",
  "vo_doelgroepcode": "EA",
  "vo_id": "a5720746-4c9e-48a8-9aa0-7ab456648487"
}