Pkce

“Proof Key for Code Exchange” biedt bescherming tegen het onderscheppen van de Authorization Code

Bij publieke Clients (zoals mobiele apps en Single Page Applications) die de oAuth Authorization Code Grant gebruiken, zijn er aanvallen mogelijk waarbij de Authorization Code onderschept wordt. Proof Key for Code Exchange (PKCE), “pixy” genaamd, biedt een techniek om dit soort aanvallen te mitigeren. De gedetailleerde werking hiervan staat beschreven in rfc7636.

Bij de start van de authenticatie wordt er op de Client een unieke “code verifier” gegenereerd, hetgeen een random sleutel is. Deze “code verifier” wordt cryptografisch getransformeerd tot een “code challenge” en die laatse wordt in het Authenticatie Request meegestuurd naar de OpenID Connect Provider om een Authorization Code aan te vragen. Zodra deze ontvangen wordt, stuurt de Client de Authorization Code samen met de “code verifier” door naar het Token Endpoint.

Op het Token Endpoint kan de “code verifier” vergeleken worden met de “code challenge” uit het Authenticatie Request, waardoor er kan gevalideerd worden dat de Client wel degelijk in het bezit was van de initiële “code verifier”. Enkel de Client die de authenticatie startte kan dus een correcte “code verifier” voorleggen.

De Client maakt een “code verifier” aan

code_verifier = cryptografische random waarde met een lengte tussen de 43 en 128 karakters

Deze code_verifier moet voldoende entropie hebben om te verhinderen dat volgende waarden geraden kunnen worden: gebruik dus een goede random number generator.

De Client maakt een “code challenge” aan

Voor de berekening van de “code_challenge” zijn er 2 mogelijke transformaties:

  • S256
    • code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
  • plain
    • code_challenge = code_verifier
    • dit is in de standaard voorzien voor Clients die om één of andere technische reden geen S256 transformaties aan kunnen: het gebruik van een “plain” transformatie biedt nauwelijks een meerwaarde

De Client stuurt de “code challenge” mee door bij het Authenticatie Request

Volgende parameters kunnen toegevoegd worden aan het Authenticatie Request:

Parameter Omschrijving
code_challenge VERPLICHT de code_challenge: dit is enkel verplicht indien PKCE voor deze Client vereist is (aan te geven in het integratiedossier)
code_challenge_method OPTIONEEL AANBEVOLEN mogelijke waarden zijn “S256” en “plain”: indien de parameter niet vermeld wordt, gaat de OP er van uit dat het “plain” is

De Client stuurt de “code verifier” mee door bij het Token Request

Volgende parameter moet toegevoegd worden aan het Token Request:

Parameter Omschrijving
code_verifier VERPLICHT de code_verifier: dit is enkel verplicht indien PKCE voor deze Client vereist is (aan te geven in het integratiedossier)

Verwerking door de OpenID Connect Provider

De oAuth Authorization Server zal enkel het access token (en eventueel het Refresh Token) uitleveren indien de getransformeerde “code verifier” overeen komt met de eerder ontvangen “code challenge”.