ID-token

Het ID-token bevat info over de authenticatie en de identiteit van de eindgebruiker

Het ID-token is een security token dat claims bevat met daarin informatie over de authenticatie en optioneel claims omtrent de identiteit van de eindgebruiker: het is een JSON Web Token (JWT).

Volgende claims zijn potentieel aanwezig in een ID-token:

Claim Omschrijving
iss Issuer: van welke OpenID Connect Provider is het ID-token afkomstig ?
sub Subject identifier: een lokaal en unieke identifier voor de eindgebruiker die steeds dezelfde blijft voor deze Issuer
aud Audiance(s) waarvoor dit ID-token bedoeld is: dit bevat het client_id van de Client, maar het kan ook meerdere audiances bevatten
iat Issued At: het tijdstip waarop het ID-token gegenereerd werd
exp Expiration time: als het ID-token na dit tijdstip ontvangen wordt, mag het niet meer verwerkt worden
nonce Een string om de Client sessie te koppelen aan het ID-token om replay attacks te mitigeren: de Client dient te valideren dat de nonce overeenkomt met diegene die in het authenticatie request werd meegestuurd
acr OPTIONEEL Authentication Context Class Reference: String met daarin de URN van het gebruikte authenticatiemiddel
azp OPTIONEEL Authorized Party: de partij (client_id) voor wie het ID-token werd geïssued
kid Key ID: de ID van de key (uit het keys endpoint) dat gebruikt werd voor de signing
andere claims Andere claims die de identiteit van de eindgebruiker definiëren. In onderstaand voorbeeld: given_name, family_name, vo_doelgroepcode, vo_id

Voorbeeld:

{
  "iss": "https://authenticatie.vlaanderen.be/op",
  "sub": "2365621db15c6e2846ca71a1f2774e79fg28c487",
  "aud": "fe5c09a2-47b0-494e-aa74-50e691c25782",
  "iat": 1592951227,  
  "exp": 1592954827,
  "nonce": "dnxuuDcNoqcSPwOggSOzb8R9JBDplb4nJYDm6pRRV28",
  "acr": "urn:be:vlaanderen:authmech:eid",
  "azp": "fe5c09a2-47b0-494e-aa74-50e691c25782",
  "kid": "lEFnQt-jonEX5JxR6T-z8eGzvJahW0ifmI5JXs8YoJs",
  "given_name": "John",
  "family_name": "Doe",
  "vo_doelgroepcode": "EA",
  "vo_id": "a5720746-4c9e-48a8-9aa0-7ab456648487",
  "at_hash": "P2m8bLK2juJwE1xoPnrumg"
}

De Client MOET het ontvangen ID-token grondig valideren. De OpenID Connect standaard beschrijft in detail hoe dit dient te gebeuren.

Een vereenvoudigde samenvatting:

  • De Client moet de signature van het ID-token valideren (cfr. JWS-validatie) waarbij het algoritme gebruikt wordt dat in de JWT als Header Parameter meegestuurd wordt. De Client dient de keys te gebruiken die door de Issuer worden aangeboden (cfr. de keys). De validatie van de TLS-sessie om het Token Endpoint te gebruiken mag volgens de standaard ook gebruikt worden ter validatie van de Issuer (ipv de signature van het ID-token)
  • de Client valideert dat de “iss"-claim (issuer) wel degelijk die van de OpenID Connect Provider is: zie de uitleg omtrent de Discovery URL voor de concrete waarde voor de ACM IDP
  • de Client dient te valideren dat zijn eigen ClientID vermeld staat in de “aud"-claim (audience): deze claim kan een array zijn met daarin meerdere waarden
  • de huidige tijd mag zeker niet na de expiry time liggen, dat vermeld wordt in de “exp"-claim (expiry time)
  • het verschil tussen de “iat"-claim (issued at) en de huidige tijd mag niet te groot zijn (het mag dus niet te lang geleden zijn dat het ID-token geïssued werd): de Client mag bepalen welke waarde aanvaardbaar is
  • indien er bij het Authenticatie Request een nonce-waarde meegestuurd werd, dan MOET er in het ID-token een “nonce"-claim aanwezig zijn met exact dezelfde waarde als in het Authenticatie Request
  • als er een acr-claim gevraagd werd, dan moet de Client valideren dat de waarde van de “acr"-claim geldig is