Saltar al contenido
ecdsa.com
WebAuthn navigator.credentials.create() / get()WebAuthn y llaves de acceso

Mensaje de error

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.

También se muestra como

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

Las versiones de Chromium que no admiten Related Origin Requests terminan la frase después de «…nor equal to the current domain.». Otros navegadores lo formulan de otra manera; el nombre de la DOMException, `SecurityError`, es la parte estable.

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

Qué significa

El RP ID de tus opciones no es el nombre de host de la página ni un dominio padre registrable de él, así que el navegador se negó a crear o usar una credencial con ese RP ID. Una llave de acceso está vinculada a su RP ID; si cualquier página pudiera atribuirse cualquier RP ID, un sitio podría usar las llaves de acceso de otro. Chromium también probó el mecanismo Related Origin Requests de WebAuthn (descargar `https://<rp-id>/.well-known/webauthn` para ver si el RP ID incluye tu origen en su lista), y tampoco así se autorizó la solicitud.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Configurar el RP ID para cada entorno

    Guarda el RP ID y el origen esperado juntos en la configuración de cada entorno, para que desarrollo, vista previa y producción usen cada uno su propio host, y recuerda que las llaves de acceso no pasan de un RP ID a otro.

    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.

    Publicar los orígenes relacionados de forma deliberada

    Si varios de tus dominios deben compartir llaves de acceso, sirve en el dominio del RP ID un `/.well-known/webauthn` que los enumere (compatible con las versiones actuales de Chromium y Safari).

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

Errores relacionados

Explorar toda la base de datos de errores de firma