Authentication

Google & Passkey

No-backend visitor sign-in — Google (FedCM) and passkeys (WebAuthn)

If you don't have a backend to sign tokens, the widget can sign visitors in itself — with Google or with passkeys. Both run inside the widget panel.

Google sign-in

When you enable Google, the widget renders a Google sign-in button, runs Google Identity Services in-panel, and forwards the resulting id_token to the backend, which verifies it against your OAuth client id.

Set it up

  1. Create an OAuth client id in the Google Cloud console.
  2. Add Wexio's widget origin to the project's Authorized JavaScript origins (https://wexio.io, or your white-label domain).
  3. In the Brand editor under Surfaces → Visitor authentication, enable Sign in with Google and provide the client id.
Surfaces → Visitor authentication — Sign in with Google and Passkey sign-in toggles

The backend verifies the token's signature, expiry, and — critically — that its audience matches your configured client id. Unverified Google emails are ignored. The client id is public by Google's design; no client secret is used or stored.

Pre-supply a Google token

If your host already has a Google id_token, pass it directly:

<WexioWidget
  publicKey="pk_live_..."
  user={{ googleIdToken: "<google-id-token>", name: "Ada Lovelace", email: "ada@example.com" }}
/>

Troubleshooting

SymptomCauseFix
Sign-in does nothingGoogle not enabled, or client id emptyEnable Sign in with Google under Surfaces → Visitor authentication and provide the client id
Sign-in fails verificationAudience mismatch, expired token, or backend clock skewConfirm the configured client id matches the token's audience; check server time

Passkey sign-in

Passkeys (WebAuthn) give visitors passwordless sign-in backed by their device — Touch ID, Face ID, Windows Hello, or a security key. Enable Passkey sign-in under Surfaces → Visitor authentication.

Two ceremonies run entirely in the widget:

  • Registration — the visitor creates a passkey, anchored to a random handle that syncs across their devices (iCloud Keychain, Google Password Manager).
  • Authentication — on return, the visitor signs in with that passkey.

The relying party is the embedding site

The passkey's relying-party id is derived from the embedding origin, validated against your allowedOrigins. Credentials are scoped to (integration, credential) — a passkey created on one integration can never authenticate on another.

Passkeys work in in-page embeds (React, Web Component) where the widget shares the host origin. For the iframe (script loader) embed, the host page must delegate WebAuthn to the iframe via an allow="publickey-credentials-get; publickey-credentials-create" permission policy — a documented v1 limitation.

Pinned profile fields

A verified sign-in pins the fields the proof carried, so the visitor can't edit them in the Profile tab:

ProofPins
Googlename, email (if verified), avatar
Signed JWTwhatever the token signed (name / email / phone / fields.*)
HMACnothing
Passkeynothing

Pins are recomputed on every identify — if your host stops sending a claim, the field becomes editable again.

On this page