Vize

use-web-authn

Encode bytes as unpadded base64url.

Package @vizejs/composable/use-web-authn
Own the source vize lib pull composable:use-web-authn
Runtime exports useWebAuthn, encodeBase64Url, decodeBase64Url, parseCreationOptionsFromJSON, parseRequestOptionsFromJSON, serializeRegistrationCredential, serializeAuthenticationCredential
Gzip budget 4096 B

Minimal setup

Use a Vue 3.5+ project with Vue SFC compilation configured (see Vite+ integration).

vp install @vizejs/composable

Import the entry directly. Call lifecycle-bound utilities inside <script setup> so cleanup follows the component scope; consult the runtime contract for this entry's SSR and hydration behavior.

import { useWebAuthn, encodeBase64Url, decodeBase64Url, parseCreationOptionsFromJSON, parseRequestOptionsFromJSON, serializeRegistrationCredential, serializeAuthenticationCredential } from "@vizejs/composable/use-web-authn";

Try it

Offer passkey sign-in

Check for a built-in authenticator before offering to create a passkey.

Open the interactive example

What to observe: Check for passkey support reports whether this device can create a passkey.

create and get accept JSON options from your server and return JSON-ready credentials. Every example renders a neutral message until it mounts, so server and client markup match, and then explains what to do when the browser lacks the API.

Compare the initial and interacted states
Offer passkey sign-in: initial state
Initial state
Offer passkey sign-in: state after the verified interactions
After the verified interactions

Copy the example

Save this complete SFC in your Vue project. Its public imports and source are the same ones executed in the preview.

<script setup lang="ts">
import { ref } from "vue";
import { useMounted } from "@vizejs/composable/use-mounted";
import { useWebAuthn } from "@vizejs/composable/use-web-authn";

const mounted = useMounted();
const { supported, isUserVerifyingPlatformAuthenticatorAvailable } = useWebAuthn();
const platform = ref<boolean>();

async function check() {
  platform.value = await isUserVerifyingPlatformAuthenticatorAvailable();
}
</script>

<template>
  <div class="composable-example">
    <p>Offer passkey sign-in only on devices with a built-in authenticator.</p>
    <button type="button" :disabled="!mounted || !supported" @click="check">
      Check for passkey support
    </button>
    <output aria-live="polite">{{
      !mounted
        ? "Checking browser support…"
        : !supported
          ? "WebAuthn is not available in this browser."
          : platform === undefined
            ? "WebAuthn is available."
            : platform
              ? "This device can create a passkey."
              : "No built-in authenticator; offer a security key or password."
    }}</output>
  </div>
</template>

Runtime contract

Utility Category Stability SSR Hydration Cleanup Targets Host globals Uses
useWebAuthn capability experimental deterministic-fallback caller-managed caller, reactive-scope web, desktop AbortController, atob, window tryOnScopeDispose
encodeBase64Url system experimental safe stable none web, server, worker, native, desktop, terminal btoa —
decodeBase64Url system experimental safe stable none web, server, worker, native, desktop, terminal atob —
parseCreationOptionsFromJSON system experimental safe stable none web, server, worker, native, desktop, terminal atob —
parseRequestOptionsFromJSON system experimental safe stable none web, server, worker, native, desktop, terminal atob —
serializeRegistrationCredential system experimental safe stable none web, server, worker, native, desktop, terminal btoa —
serializeAuthenticationCredential system experimental safe stable none web, server, worker, native, desktop, terminal btoa —

API

encodeBase64Url

Encode bytes as unpadded base64url.

function encodeBase64Url(bytes: ArrayBuffer | ArrayBufferView): string

decodeBase64Url

Decode base64url (padded or unpadded) into bytes.

function decodeBase64Url(text: string): Uint8Array<ArrayBuffer>

parseCreationOptionsFromJSON

Convert server creation-options JSON into binary options for create.

function parseCreationOptionsFromJSON( json: PublicKeyCredentialCreationOptionsJSON, ): WebAuthnCreationInit

parseRequestOptionsFromJSON

Convert server request-options JSON into binary options for get.

function parseRequestOptionsFromJSON( json: PublicKeyCredentialRequestOptionsJSON, ): WebAuthnRequestInit

serializeRegistrationCredential

Serialize a registration credential into JSON-safe base64url fields.

function serializeRegistrationCredential( credential: RegistrationCredentialLike, ): RegistrationResponseJSON

serializeAuthenticationCredential

Serialize an authentication credential into JSON-safe base64url fields.

function serializeAuthenticationCredential( credential: AuthenticationCredentialLike, ): AuthenticationResponseJSON

useWebAuthn

Register and authenticate passkeys with the Web Authentication API. create and get accept binary options or server JSON, run one ceremony at a time (starting one aborts the previous), and resolve to a discriminated WebAuthnResult. Use the exported pure helpers to serialize results for the server. A pending ceremony is aborted when the owning reactive scope stops; outside a scope call abort(). Server rendering: nothing is requested, supported and pending are false.

function useWebAuthn(options: UseWebAuthnOptions = {}): WebAuthnControls
const webAuthn = useWebAuthn();
const result = await webAuthn.get(await fetchJSON("/login/options"));
if (result.status === "success") await post(serializeAuthenticationCredential(result.credential));

Types

PublicKeyCredentialDescriptorJSON

Credential descriptor in server JSON form.

Member Type Description
type "public-key" Credential type.
id string Base64url-encoded credential id.
transports? readonly WebAuthnTransport[] Transports the credential is reachable through.

WebAuthnCredentialDescriptor

Credential descriptor in binary form.

Member Type Description
type "public-key" Credential type.
id Uint8Array<ArrayBuffer> Raw credential id.
transports? WebAuthnTransport[] Transports the credential is reachable through.

WebAuthnAuthenticatorSelection

Authenticator selection criteria of a registration ceremony.

Member Type Description
authenticatorAttachment? WebAuthnAuthenticatorAttachment Required attachment modality.
residentKey? WebAuthnResidentKey Discoverable-credential requirement.
requireResidentKey? boolean Legacy discoverable-credential flag.
userVerification? WebAuthnUserVerification User verification requirement.

WebAuthnRelyingParty

Relying party entity.

Member Type Description
id? string Relying party id (a registrable domain).
name string Human-readable name.

WebAuthnCredentialParameter

Public-key algorithm parameter.

Member Type Description
type "public-key" Credential type.
alg number COSE algorithm identifier (for example -7 for ES256).

PublicKeyCredentialCreationOptionsJSON

PublicKeyCredentialCreationOptions as serialized by a server (binary fields base64url).

Member Type Description
rp Readonly<WebAuthnRelyingParty> Relying party.
user { readonly id: string; readonly name: string; readonly displayName: string } User account with a base64url-encoded id.
challenge string Base64url-encoded challenge.
pubKeyCredParams readonly Readonly<WebAuthnCredentialParameter>[] Acceptable algorithms in preference order.
timeout? number Ceremony timeout in milliseconds.
excludeCredentials? readonly PublicKeyCredentialDescriptorJSON[] Credentials that must not be re-registered.
authenticatorSelection? Readonly<WebAuthnAuthenticatorSelection> Authenticator selection criteria.
attestation? WebAuthnAttestation Attestation preference.
hints? readonly WebAuthnHint[] Authenticator hints.
extensions? Readonly<Record<string, unknown>> Client extension inputs; PRF values are decoded from base64url.

PublicKeyCredentialRequestOptionsJSON

PublicKeyCredentialRequestOptions as serialized by a server (binary fields base64url).

Member Type Description
challenge string Base64url-encoded challenge.
timeout? number Ceremony timeout in milliseconds.
rpId? string Relying party id.
allowCredentials? readonly PublicKeyCredentialDescriptorJSON[] Allowed credentials; empty or omitted for discoverable credentials.
userVerification? WebAuthnUserVerification User verification requirement.
hints? readonly WebAuthnHint[] Authenticator hints.
extensions? Readonly<Record<string, unknown>> Client extension inputs; PRF values are decoded from base64url.

WebAuthnCreationInit

Binary creation options passed to navigator.credentials.create.

Member Type Description
rp WebAuthnRelyingParty Relying party.
user { id: Uint8Array<ArrayBuffer>; name: string; displayName: string } User account.
challenge Uint8Array<ArrayBuffer> Challenge bytes.
pubKeyCredParams WebAuthnCredentialParameter[] Acceptable algorithms in preference order.
timeout? number Ceremony timeout in milliseconds.
excludeCredentials? WebAuthnCredentialDescriptor[] Credentials that must not be re-registered.
authenticatorSelection? WebAuthnAuthenticatorSelection Authenticator selection criteria.
attestation? WebAuthnAttestation Attestation preference.
hints? WebAuthnHint[] Authenticator hints.
extensions? Record<string, unknown> Client extension inputs.

WebAuthnRequestInit

Binary request options passed to navigator.credentials.get.

Member Type Description
challenge Uint8Array<ArrayBuffer> Challenge bytes.
timeout? number Ceremony timeout in milliseconds.
rpId? string Relying party id.
allowCredentials? WebAuthnCredentialDescriptor[] Allowed credentials.
userVerification? WebAuthnUserVerification User verification requirement.
hints? WebAuthnHint[] Authenticator hints.
extensions? Record<string, unknown> Client extension inputs.

PublicKeyCredentialLike

Fields shared by every returned PublicKeyCredential.

Member Type Description
id string Base64url credential id.
rawId ArrayBuffer Raw credential id.
type string Credential type ("public-key").
authenticatorAttachment? string | null Attachment of the authenticator that produced the credential.
getClientExtensionResults () => object Client extension outputs.

RegistrationCredentialLike

Credential returned by a registration ceremony.

Member Type Description
id string Base64url credential id.
rawId ArrayBuffer Raw credential id.
type string Credential type ("public-key").
authenticatorAttachment? string | null Attachment of the authenticator that produced the credential.
getClientExtensionResults () => object Client extension outputs.
response { /** Client data. */ readonly clientDataJSON: ArrayBuffer; /** CBOR attestation object. */ readonly attestationObject: ArrayBuffer; /** Transports reported by the authenticator. */ getTransports?(): readonly string[]; /** DER SubjectPublicKeyInfo of the new credential. */ getPublicKey?(): ArrayBuffer | null; /** COSE algorithm of the new credential. */ getPublicKeyAlgorithm?(): number; /** Authenticator data. */ getAuthenticatorData?(): ArrayBuffer; } Attestation response.

AuthenticationCredentialLike

Credential returned by an authentication ceremony.

Member Type Description
id string Base64url credential id.
rawId ArrayBuffer Raw credential id.
type string Credential type ("public-key").
authenticatorAttachment? string | null Attachment of the authenticator that produced the credential.
getClientExtensionResults () => object Client extension outputs.
response { /** Client data. */ readonly clientDataJSON: ArrayBuffer; /** Authenticator data. */ readonly authenticatorData: ArrayBuffer; /** Assertion signature. */ readonly signature: ArrayBuffer; /** User handle of a discoverable credential. */ readonly userHandle: ArrayBuffer | null; } Assertion response.

RegistrationResponseJSON

JSON-safe registration result, ready to POST to a server.

Member Type Description
id string Base64url credential id.
rawId string Base64url raw credential id.
type "public-key" Credential type.
authenticatorAttachment? WebAuthnAuthenticatorAttachment Authenticator attachment, when known.
clientExtensionResults object Client extension outputs.
response { /** Base64url client data. */ readonly clientDataJSON: string; /** Base64url attestation object. */ readonly attestationObject: string; /** Known transports. */ readonly transports?: readonly WebAuthnTransport[]; /** Base64url public key, when exposed. */ readonly publicKey?: string; /** COSE algorithm, when exposed. */ readonly publicKeyAlgorithm?: number; /** Base64url authenticator data, when exposed. */ readonly authenticatorData?: string; } Attestation response with base64url fields.

AuthenticationResponseJSON

JSON-safe authentication result, ready to POST to a server.

Member Type Description
id string Base64url credential id.
rawId string Base64url raw credential id.
type "public-key" Credential type.
authenticatorAttachment? WebAuthnAuthenticatorAttachment Authenticator attachment, when known.
clientExtensionResults object Client extension outputs.
response { /** Base64url client data. */ readonly clientDataJSON: string; /** Base64url authenticator data. */ readonly authenticatorData: string; /** Base64url signature. */ readonly signature: string; /** Base64url user handle, when present. */ readonly userHandle?: string; } Assertion response with base64url fields.

WebAuthnCredentialsHost

Minimal navigator.credentials consumed by useWebAuthn.

Member Type Description
create (options: { publicKey: WebAuthnCreationInit; signal?: AbortSignal; mediation?: WebAuthnMediation; }) => Promise<unknown> Run a registration ceremony.
get (options: { publicKey: WebAuthnRequestInit; signal?: AbortSignal; mediation?: WebAuthnMediation; }) => Promise<unknown> Run an authentication ceremony.

PublicKeyCredentialStatics

Static capability checks of PublicKeyCredential.

Member Type Description
isUserVerifyingPlatformAuthenticatorAvailable? () => Promise<boolean> Whether a user-verifying platform authenticator (Touch ID, Windows Hello) exists.
isConditionalMediationAvailable? () => Promise<boolean> Whether conditional mediation (passkey autofill) is available.

UseWebAuthnOptions

Options for useWebAuthn.

Member Type Description
credentials? MaybeRefOrGetter<WebAuthnCredentialsHost | null | undefined> Credentials container for alternate runtimes and tests.
publicKeyCredential? MaybeRef<PublicKeyCredentialStatics | null | undefined> PublicKeyCredential interface used for capability checks. A ref (not a getter) because the browser value is a constructor function.

WebAuthnCeremonyOptions

Per-ceremony options of WebAuthnControls.create and WebAuthnControls.get.

Member Type Description
mediation? WebAuthnMediation Mediation requirement; "conditional" for passkey autofill.
signal? AbortSignal Additional signal aborting the ceremony.

WebAuthnControls

Reactive state and actions returned by useWebAuthn.

Member Type Description
supported ComputedRef<boolean> Whether WebAuthn is available.
pending Readonly<Ref<boolean>> Whether a ceremony is in progress.
error Readonly<ShallowRef<unknown>> Most recent ceremony failure (not aborts), cleared when a ceremony starts.
create ( options: WebAuthnCreationInit | PublicKeyCredentialCreationOptionsJSON, ceremony?: WebAuthnCeremonyOptions, ) => Promise<WebAuthnResult<RegistrationCredentialLike>> Register a credential. Aborts any pending ceremony first.
get ( options: WebAuthnRequestInit | PublicKeyCredentialRequestOptionsJSON, ceremony?: WebAuthnCeremonyOptions, ) => Promise<WebAuthnResult<AuthenticationCredentialLike>> Authenticate with a credential. Aborts any pending ceremony first.
abort (reason?: unknown) => void Abort the pending ceremony, if any.
isUserVerifyingPlatformAuthenticatorAvailable () => Promise<boolean> Whether a user-verifying platform authenticator exists.
isConditionalMediationAvailable () => Promise<boolean> Whether conditional mediation (passkey autofill) is available.