Les passkeys : ce qui change vraiment pour votre application PHP

Les passkeys ne sont pas un nouveau protocole. Ce sont des authentifiants WebAuthn que le système d’exploitation synchronise entre les appareils d’un utilisateur. Le format sur le fil n’a pas changé. Ce qui a changé, c’est tout ce que vous supposiez autour.

Un authentifiant, plusieurs appareils

Avant les passkeys, un authentifiant WebAuthn vivait sur exactement un authentificateur. Si votre modèle de données supposait un authentifiant par appareil, il se trouvait avoir raison. Ce n’est plus le cas : le même authentifiant peut désormais signer depuis un ordinateur portable, un téléphone et une tablette.

La conséquence pratique porte sur le compteur de signature. La spécification permet à un authentificateur d’incrémenter un compteur à chaque usage, pour qu’un serveur détecte une clé clonée. Les authentifiants synchronisés ne tiennent pas de compteur qui ait un sens, et annoncent souvent zéro. Un serveur qui rejette une authentification parce que le compteur n’a pas augmenté bloquera des utilisateurs légitimes.

La récupération devient le problème de quelqu’un d’autre, en grande partie

Une clé de sécurité perdue signifiait autrefois un authentifiant perdu, et il vous fallait un chemin de récupération. Un téléphone perdu, avec des passkeys, signifie que l’utilisateur se connecte sur un nouvel appareil avec son compte de plateforme et que l’authentifiant suit.

Cela ne supprime pas votre responsabilité. Cela déplace le maillon faible vers le compte de plateforme, et vous ne le voyez plus. Décidez délibérément si vous voulez toujours un second authentifiant enregistré, et dites-le à l’enregistrement plutôt que de découvrir la question pendant un incident.

L’attestation a pour ainsi dire disparu

L’attestation vous permet de savoir quelle marque et quel modèle d’authentificateur a servi. C’est ce qui permet à une organisation d’exiger du matériel certifié. Les passkeys synchronisées ne fournissent en général aucune attestation exploitable.

Si votre politique a besoin de l’attestation, vous ne pouvez pas accepter les passkeys pour cette population. Si elle n’en a pas besoin, demander l’attestation ne fait qu’ajouter un mode de défaillance. Choisissez, et écrivez pourquoi.

Quoi faire dans le code

  • Rangez plusieurs authentifiants par utilisateur, et affichez-les dans une liste que l’utilisateur peut gérer.
  • Traitez un compteur à zéro comme normal, pas comme une alarme au clonage.
  • Posez residentKey à preferred ou required si vous voulez une connexion sans nom d’utilisateur.
  • Employez l’interface conditionnelle pour que le navigateur propose la passkey dans le champ de connexion lui-même.

Webauthn-Framework s’occupe du côté protocole de tout cela. Les décisions ci-dessus sont les vôtres, et ce sont elles qu’il est facile de rater.