Accueil > OpenID Connect OAuth Server par DnC > Développer > OpenID Connect > API OpenId Connect : Point d’extrémité d’informations sur les clefs (Keys (...)

API OpenId Connect : Point d’extrémité d’informations sur les clefs (Keys Endpoint)

Le protocole OpenID Connect utilise un jeton d’identité (ID Token) fondé sur JWT. La norme décrit comment une application cliente doit valider un ID Token reçu en réponse à une demande d’authentification. Un tiers (le serveur de ressource protégé notamment) peut évidemment appliquer la même méthode, à condition d’accéder aux informations nécessaires. La validation est effectuée à l’aide d’un cryptage asymétrique, mettant en œuvre une paire de clé publique-privée. Le serveur de ressource protégé (RS) doit donc pouvoir accéder à la clé publique.

C’est ce que permet le

Point d’extrémité d’informations sur les clefs (Keys Endpoint)

https://oa.dnc.global/keys

Ce point permet à un serveur de ressource d’accéder à une liste de définitions des clés publiques

Chaque définition de clé est représentée sous un format JSON sont définies 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.

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.