Skip to content

Passkeys

Let people sign in with the fingerprint, face or screen lock of their device, as the first step or as a phishing-resistant second factor.

A passkey is a WebAuthn credential: a key pair whose private half never leaves the person’s device or password manager. Signing in means unlocking the device the way they already do — fingerprint, face, PIN or screen lock — and the browser only offers the passkey to the site it was created for, so a fake sign-in page has nothing to collect.

In Authio a passkey is one of the sign-in steps a client can ask for. It can replace the password entirely or follow it as a second factor, and the tokens your app receives say which one happened.

How passkeys work in Authio

  • Passkeys are created and used on the hosted login, so they are bound to the domain it runs on and work for every client of the realm that offers the passkey step.
  • Registration asks for a discoverable credential and for user verification, so the person can sign in without typing a username. No attestation is requested: Authio does not ask the device to identify its maker.
  • Synced passkeys (iCloud Keychain, Google Password Manager, 1Password and others) and device-bound ones (Windows Hello, security keys) both work.
  • A device that already holds a passkey for the account cannot register a second one for it.
  • The account passes the same checks as a password sign-in: realm and client active, lockout, suspension, e-mail confirmation and address approval.

First step or second factor

Used asWhat is checkedWhat the session records
The first step, instead of a passwordThe device must verify the person (biometrics or PIN). A passkey without verification is refused here.Two factors: swk and user, with acr 3.
A second factor, after the passwordVerification is preferred, not required, so password managers that answer without it are accepted. Only the passkeys of the account whose password was accepted count.pwd plus swk, and user when the device verified the person. acr is 3 with verification and 2 without.

A passkey sign-in still follows the client’s other steps: if the client also asks for the e-mail code, the code is asked after the passkey.

Turn passkeys on for a client

  1. Add the passkey step

    In Clients, open the client, choose Edit and go to Login layout. Add the passkey step: first in the list for a passwordless sign-in, after login for a second factor.

  2. Choose its requirement and registration

    The defaults, Preferred and Offer, build the base gradually: an account without a passkey signs in with its password and is offered to register one; from then on the passkey is asked every time. See requirement and registration for the other values.

  3. Save

    The step applies from the next sign-in. The account pages of the client start listing passkeys at the same time.

You wantSteps, in orderPolicy
Password, with passkeys rolling outlogin, passkeyPreferred and Offer.
Password plus a passkey for everyonelogin, passkeyRequired and Require.
Passkey first, password as the way in for newcomerspasskey, loginPreferred and Offer.
Passkey onlypasskeyRequired and Never: accounts register their passkey elsewhere first, for example on another client of the realm that has a login step.
Removing the passkey step closes the passkey endpoints for that client too, not only the button. On a passkey-only client, nobody can sign in until the step is back or another step is added.

Signing in with a passkey

What the person sees depends on where the step sits:

  • As the first step, the screen shows Continue with passkey. The browser lists the passkeys it holds for the site; no username is needed. If the client also has a login step, a link offers I don’t have a passkey yet — sign in with my password.
  • In the username field, when the client has both login and passkey, the browser’s autofill offers the saved passkeys next to saved passwords (WebAuthn conditional UI). Choosing one signs in without typing anything.
  • After the password, the browser asks for one of that account’s passkeys. A passkey of somebody else is refused as unknown.

A browser that cannot use passkeys says so on the screen and points to another way in.

Registering a passkey

There are two places a person registers a passkey:

  • During sign-in, when the step’s registration is Offer or Require: after signing in another way, the screen shows Set up a passkey, an optional field to name the device and Register this device. With Offer, Not now skips it. An account that already has a passkey elsewhere sees Passkey ready and can Also register this device.
  • From the account pages, on the Passkeys tab: name the device and choose Register this device. See Account self-service.
Encourage a second passkey. The account pages flag a passkey that lives on a single device, because losing that device means losing the credential.

When the passkey is not on this device

When the passkey is owed as a second factor, the screen offers My passkey is not on this device — send me a code instead. Authio sends a one-time code to the account’s e-mail and the code answers for the passkey step, even on a client whose steps include no e-mail code. A client that asks for a passkey therefore never locks out someone who lost their device.

The session records only what was actually used — pwd, otp and mfa, with acr 2 — so an app that needs the phishing-resistant level can tell it did not get it and ask again later.

A lost or retired device should also lose its passkey. The person removes it from the Passkeys tab of the account pages; an administrator removes it from the console (see below).

Managing passkeys

WhereWhoWhat it shows and does
Account pages, Passkeys tabThe personEach passkey’s name, kind of device (this device, phone or tablet, USB, NFC or Bluetooth security key, smart card), whether it is synced, when it was added and last used. Register this device or remove a passkey. The tab lists passkeys only when the client offers the passkey step.
Users, the user’s Credentials tabAn administratorThe authenticator model identified by its AAGUID (Windows Hello, iCloud Keychain, YubiKey and others), transports, backup state and last use, with passkeys that would be lost with their device highlighted. Remove a passkey.

What your app receives

The ID token carries amr (the methods used) and acr (the level reached). Read them to decide whether a sign-in is strong enough for what the person is about to do:

Sign-inamracr
Passkey alone, verifiedswk, user, mfa3
Password, then a verified passkeypwd, swk, user, mfa3
Password, then a passkey without verificationpwd, swk, mfa2
Password, then the recovery codepwd, otp, mfa2

To ask for a phishing-resistant sign-in, send acr_values=3. It is best effort: see step-up.

Next steps