Pular para o conteúdo
ecdsa.com
WebAuthn navigator.credentials.create() / get()WebAuthn e chaves de acesso

Mensagem de erro

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.

Também aparece como

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

Versões do Chromium sem suporte a Related Origin Requests terminam a frase em “…nor equal to the current domain.”. Outros navegadores usam outra redação; a parte estável é o nome da DOMException, `SecurityError`.

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

O que significa

O RP ID das suas opções não é o nome de host da própria página nem um domínio pai registrável dele, então o navegador se recusou a criar ou usar uma credencial para esse RP ID. Uma chave de acesso (passkey) fica vinculada ao próprio RP ID; se qualquer página pudesse declarar qualquer RP ID, um site conseguiria usar as chaves de acesso de outro. O Chromium também tentou o mecanismo Related Origin Requests do WebAuthn (buscando `https://<rp-id>/.well-known/webauthn` para ver se o RP ID lista sua origem), e esse mecanismo também não autorizou a requisição.

Por que acontece

Como corrigir

  1. 1.

    Configurar o RP ID por ambiente

    Mantenha o RP ID e a origem esperada juntos na configuração do ambiente, para que desenvolvimento, preview e produção usem cada um o próprio host — e lembre-se de que as chaves de acesso não migram entre RP IDs.

    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 as origens relacionadas de forma deliberada

    Se vários dos seus domínios precisam compartilhar chaves de acesso, sirva no domínio do RP ID um `/.well-known/webauthn` que os liste (compatível com as versões atuais do Chromium e do Safari).

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

Erros relacionados

Ver toda a base de erros de assinatura