Private Key JWT (client_assertion)
Om te authenticeren tegen het toestemmingsplatform dient er gebruik gemaakt te worden van het OAuth2 principe private_key_jwt
Hierbij wordt op basis van een (bij alleen de aanroeper bekende) private key (RSA of EC) een getekende JWT aangeleverd te worden bij een verzoek voor een token. Dit door middel van het veld: client_assertion
. Het toestemmingsplatform zal op basis van de geregistreerde public key(s) in combinatie met het keyID valideren dat deze JWT correct is getekend. Hiermee wordt aangetoond dat de aanroeper ook gemachtigd is.
Voorbeeldcode voor het maken van een client-assertion.
Het toestemmingsplatform kan gebruik maken van RSA en EC keys. Dit kan zowel met PEM keys als keys op basis van JWK. De uitleg hieronder gaat uit van PEM keys.
Het aanmaken van deze PEM keys kan met behulp van het openssl
commando.
RSA key
openssl genrsa -out private-key.pem 2048
openssl rsa -in private-key.pem -pubout -out public-key.pem
EC key
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem
De public key PEM die als resultaat van het laatste commando wordt gebruikt is de input voor het toestemmingsplatform. Deze dient op dienst niveau geconfigureerd te worden als public key.
JWT claims
Bij het aanroepen van het token endpoint van het toestemmingsplatform dient het veld client_assertion
te worden gevuld met een JWT welke (tenminste) bestaat uit de volgende velden:
Header:
|
JWA algoritme |
Algoritme gebruikt voor het tekenen van de JWT |
|
Key ID |
Identifier om aan te geven welke key is gebruikt voor het tekenen van de JWT (en welke public key gebruikt moet worden ter validatie) |
Claims:
|
Issuer |
De Client ID die bij het aanmaken van de dienstengroep is getoond |
|
Subject |
De Client ID die bij het aanmaken van de dienstengroep is getoond |
|
Audience |
De issuer url van het toestemmingsplatform zoals ook is geregistreerd in de OpenID Configuration van het toestemmingsplatform |
|
JWT ID |
Uniek ID van het JWT |
|
Issued At |
Timestamp welke aangeeft wanner het token is gecreƫerd |
|
Expiration time |
Tot wanneer dit JWT geldig is |