Aller au contenu principal

Clés de signature

Les clés de signature OIDC de Logto, également appelées "clés privées OIDC" et "clés de cookie OIDC", sont les clés utilisées pour signer les JWTs (jetons d’accès (Access tokens) et jetons d’identifiant (ID tokens)) ainsi que les cookies de navigateur dans les sessions de connexion Logto. Ces clés de signature sont générées lors de l'initialisation de la base de données Logto (open-source) ou lors de la création d'un nouveau tenant (Cloud) et peuvent être gérées via le CLI (open-source), les Management APIs ou l'interface Console UI.

Par défaut, Logto utilise l’algorithme à courbe elliptique (EC) pour générer les signatures numériques. Cependant, étant donné que les utilisateurs doivent souvent vérifier les signatures JWT et que de nombreux anciens outils ne prennent pas en charge l’algorithme EC (ne supportant que RSA), nous avons implémenté la fonctionnalité de rotation des clés privées et permis aux utilisateurs de choisir l’algorithme de signature (y compris RSA et EC). Cela garantit la compatibilité avec les services utilisant des outils de vérification de signature obsolètes.

remarque:

Théoriquement, les clés de signature ne devraient pas être divulguées et n'ont pas de date d'expiration, ce qui signifie qu'il n'est pas nécessaire de les faire tourner. Cependant, effectuer une rotation périodique de la clé de signature après une certaine période peut renforcer la sécurité.

Comment ça fonctionne ?

  • Clé privée OIDC Lors de l'initialisation d'une instance Logto, une paire de clé publique et clé privée est automatiquement générée et enregistrée dans le fournisseur OIDC sous-jacent. Ainsi, lorsque Logto émet un nouveau JWT (jeton d’accès ou jeton d’identifiant), le jeton est signé avec la clé privée. Pendant ce temps, toute application cliente qui reçoit un JWT peut utiliser la clé publique associée pour vérifier la signature du jeton, afin de s'assurer que le jeton n'a pas été altéré par un tiers. La clé privée est protégée sur le serveur Logto. La clé publique, comme son nom l'indique, est publique et accessible à tous via l'interface /oidc/jwks du point de terminaison OIDC. Un algorithme de clé de signature peut être spécifié lors de la génération de la clé privée, et Logto utilise par défaut l’algorithme EC (Elliptic Curve). Les administrateurs peuvent changer l’algorithme par défaut en RSA (Rivest-Shamir-Adleman) en effectuant une rotation des clés privées.
  • Clé de cookie OIDC Lorsqu’un utilisateur initie un flux de connexion ou d’inscription, une "session OIDC" est créée sur le serveur, ainsi qu’un ensemble de cookies de navigateur. Avec ces cookies, le navigateur peut demander à l’Experience API Logto d’effectuer une série d’interactions au nom de l’utilisateur, telles que la connexion, l’inscription et la réinitialisation du mot de passe. Cependant, contrairement aux JWTs, les cookies sont uniquement signés et vérifiés par le service OIDC Logto lui-même, des mesures de cryptographie asymétrique ne sont donc pas nécessaires. Ainsi, il n’existe pas de clés publiques associées pour les clés de signature de cookie, ni d’algorithmes de chiffrement asymétrique.

Faire tourner les clés de signature depuis la Console UI

Logto introduit une fonctionnalité de "Rotation des clés de signature", qui vous permet de créer une nouvelle clé privée OIDC et une clé de cookie dans votre tenant.

  1. Accédez à Console > Clés de signature. À partir de là, vous pouvez gérer à la fois les clés privées OIDC et les clés de cookie OIDC.

  2. Pour faire tourner la clé de signature, cliquez sur le bouton "Faire tourner les clés privées" ou "Faire tourner les clés de cookie". Lors de la rotation des clés privées, vous avez la possibilité de changer l’algorithme de signature.

  3. Vous trouverez un tableau qui liste toutes les clés de signature utilisées. Remarque : Vous pouvez supprimer la clé précédente, mais vous ne pouvez pas supprimer la clé actuelle.

    StatutDescription
    ActuelleIndique que cette clé est actuellement utilisée dans vos applications et APIs.
    PrécédenteFait référence à une clé précédemment utilisée mais qui a été remplacée. Les jetons existants signés avec cette clé restent valides.

Veuillez noter que la rotation implique les trois actions suivantes :

  1. Création d’une nouvelle clé de signature : Cela obligera toutes vos applications et APIs à adopter la nouvelle clé de signature.
  2. Rotation de la clé actuelle : La clé existante sera désignée comme "précédente" après la rotation et ne sera plus utilisée par les nouvelles applications et APIs. Cependant, les jetons signés avec cette clé resteront valides.
  3. Suppression de votre clé précédente : Les clés étiquetées comme "précédente" seront révoquées et supprimées du tableau.
attention:

Ne faites jamais tourner les clés de signature consécutivement (deux fois ou plus), car cela pourrait invalider TOUS les jetons émis.

  • Pour les utilisateurs OSS, après la rotation de la clé de signature, un redémarrage de l’instance Logto est nécessaire pour que la nouvelle clé prenne effet.
  • Pour les utilisateurs Cloud, la nouvelle clé de signature prend effet immédiatement après la rotation, mais veillez à ne pas faire tourner la clé de signature plusieurs fois de suite.

Introduction aux algorithmes de signature EC et RSA dans les JWT