C’est ce que permet le
Point d’extrémité d’informations sur les clefs (Keys Endpoint)
https://oa.dnc.global/keys
Forme de la demande d’informations sur les clés
La demande ne doit être effectuée que par la méthode POST.
Le client doit inclure ses informations d’authentification telles que décrites à la section 2.3. du document [RFC6749].
Exemple de requête :
POST /keys HTTP/1.1
Host: oa.dnc.global
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Réponse
En cas de succès le serveur retourne une réponse HTTP 200.
Le corps de la réponse contient une liste de définitions des clés publiques.
Chaque définition de clé est représentée sous un format JSON telle que défini dans le document JSON Web Key (JWK).
Exemple
Voici un exemple de réponse au format JSON :
[JSON]
{"keys":[{
"kid":"618584200ef916a154008d898a1e7edc",
"kty":"RSA",
"alg":"RS256",
"use":"sig",
"e":"AQAB",
"n":"ykcWIXjQ-f61XCJutT4JcgpmmobtB0U7ZcejT8tBD8rOZPkQDYf0Q3pMjCkNT8RRKzMYtkelY2CNn3U7kVJMgbJAtvZsCdlChVHAKvRnjwh1GR_6Zpmajm5cuz4bjQWWUIPIoXe_4JbC8nCrHdaagzB_6PrV_NILyn5unG1RLOrWx7_yzLaterDKxHTCBeOlqv_5VGFey0Ecf-X7Bj8YRx6fpamK4BcEAZSAbZMtAnTckp3hOYJgZo3MOXDxSQw1YR83i5Udcoaf7sxfhEA_b7r9CeNfgj76MKM7sdCfBMI7_JSz-YU_pJKCuT9Ny3IJQ0fQHpDzSq2oD_3cDcLjfXTGM67rXElwr9l8yrSNa29UGK4q2u9cFCQmJGlxVhZU6bzs7l4202LTJdPlzm_29jwLVvtqnVJSovMLHx84ReFtus1RdKRGB2plDQccvBNvp92D9lOnM3bAu1fKRAJwNh3hg1d6k7MVCHxoo9HVnkxzW48rAAJE2nk44a2Y0cclufBhvKRdNavldS1XOyZ_qf3qCAzsuYF1VAga8I-QOb6OyXp0KGLptbyYD-ZXISGPw3pDD3aAof_PMfFhSB96GHDnm-UCRpFHndQ_fZgtZhWugU8z22rV-irYCySqVkpE0ToWbNXNFZ9Jo1GXdwkpi1WjB7S-ipjzRFOlxhwbvZ0"},
...
kid
Comme différentes applications clientes peuvent utiliser la même paire de clé publique/privée, les clés sont indexées par un identifiant "kid" plutôt que par un client_id.
Cet identifiant est notamment présent dans la charge utile du jeton JWT, ce qui permettra de sélectionner la clé publique nécessaire pour valider la signature du jeton JWT.
jwks_uri, fichier jwks.json
La norme prévoit que le document de découverte .well-known/openid_configuration définisse une constante jwks_uri donnant l’URL du fichier jwks.json, sous la forme :
"jwks_uri" : "https://oa.dnc.global/jwks/jwks.json",
Cette URL permet d’obtenir la même information que par le Point d’extrémité d’informations sur les clefs. Cependant, ces données sont statiques, alors que l’appel au contrôleur Keys recalcule le fichier jwks.json à chaque fois afin de prendre en compte un éventuel changement.
UpdatekeysController
OAuthSD propose un point d’entrée "updatekeys" qui provoque le re-calcul des paires de clés publiques-privées de tous les clients ainsi que la mise à jour des informations sur les clés.
Ce contrôleur n’est accessible qu’à partir de la même adresse que le serveur et sera donc soit lancé localement par le Superviseur soit par une tâche CRON à l’aide de wget.
Notes :
Outre le fichier jwks.json, le dossier /jwks contient un fichier au format JSON pour chaque clé publique, sous le nom <kid>.json
.
Compte-tenu de la charge de calcul nécessaire à l’établissement du fichier, l’appel au point d’extrémité Keys doit être réservé à des applications de confiance ou être protégé contre les attaques de type déni de service.
Pour éviter le recalcul du fichier jwks.json à chaque appel de Keys, il est possible de modifier la règle de réécriture dans le fichier .htaccess pour :
RewriteRule ^keys /jwks/jwks.json [QSA,L]
Une clé publique peut également être lue au moyen de l’API HTTP REST + TreeQL.