Aller au contenu
ecdsa.com
WebAuthn navigator.credentials.create() / get()WebAuthn et clés d’accès

Message d’erreur

SecurityError: The relying party ID is not a registrable domain suffix of, nor equal to the current domain. Subsequently, an attempt to fetch the .well-known/webauthn resource of the claimed RP ID failed.

Également affiché sous la forme

  • SecurityError: The relying party ID is not a registrable domain suffix of, nor equal to the current domain.

Les versions de Chromium sans prise en charge de Related Origin Requests terminent la phrase après « …nor equal to the current domain. ». Les autres navigateurs la formulent différemment ; le nom de la DOMException, `SecurityError`, est la partie stable.

WebAuthn navigator.credentials.create() / get() — DOMException SecurityError (Chromium)

Ce que cela signifie

L’ID de la partie de confiance (RP ID) indiqué dans vos options n’est ni le nom d’hôte de la page, ni un domaine parent enregistrable de celui-ci : le navigateur a donc refusé de créer ou d’utiliser un identifiant pour ce RP ID. Une clé d’accès est liée à son RP ID ; si n’importe quelle page pouvait revendiquer n’importe quel RP ID, un site pourrait utiliser les clés d’accès d’un autre. Chromium a aussi essayé le mécanisme WebAuthn Related Origin Requests (récupérer `https://<rp-id>/.well-known/webauthn` pour voir si le RP ID liste votre origine), et ce mécanisme n’a pas non plus autorisé la requête.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Configurer le RP ID par environnement

    Conservez le RP ID et l’origine attendue ensemble dans la configuration de l’environnement, afin que le développement, la prévisualisation et la production utilisent chacun leur propre hôte. Et n’oubliez pas que les clés d’accès ne passent pas d’un RP ID à un autre.

    js
    // Server: derive the RP ID from configuration per environment, never hard-code production.
    const rpID = process.env.WEBAUTHN_RP_ID;          // "localhost" in dev, "example.com" in production
    const expectedOrigin = process.env.WEBAUTHN_ORIGIN; // "http://localhost:3000" / "https://app.example.com"
    const options = await generateRegistrationOptions({ rpName: "Example", rpID, userName });
  2. 2.

    Publier délibérément les origines associées

    Si plusieurs de vos domaines doivent partager des clés d’accès, servez sur le domaine du RP ID un fichier `/.well-known/webauthn` qui les liste (pris en charge par les versions actuelles de Chromium et de Safari).

    json
    // https://example.com/.well-known/webauthn  (served as application/json)
    {
      "origins": ["https://example.co.uk", "https://example-shop.com"]
    }

Erreurs associées

Parcourir toute la base de données des erreurs de signature