Gepubliceerd: 9 mei 2025
Passkeys bieden sterke, phishingbestendige authenticatie. Het kan echter lastig zijn om gebruikers zover te krijgen dat ze deze gebruiken. Met automatische passkey-aanmaak kunt u op het juiste moment passkeys voor uw gebruikers aanmaken, mits ze al een wachtwoord voor uw site hebben opgeslagen. Conditional Create, dat automatische passkey-aanmaak mogelijk maakt, maakt deel uit van de WebAuthn-specificatie.
Hoe het werkt
Om gebruikers te helpen gemakkelijker wachtwoorden te gebruiken, kunt u een WebAuthn API-functie gebruiken genaamd Conditional Create . Met Conditional Create kan uw site een wachtwoord voor de gebruiker opvragen zonder dat de gebruiker iets hoeft te doen.
Deze stroom werkt als aan de volgende voorwaarden is voldaan:
- De gebruiker heeft een wachtwoord opgeslagen in zijn standaardwachtwoordbeheerder.
- Het wachtwoord is recent gebruikt. Het is het beste om Conditional Create direct na een succesvolle wachtwoordgebaseerde login aan te roepen.
Als aan beide voorwaarden is voldaan, kunt u de wachtwoordbeheerder vragen een sleutel voor de gebruiker aan te maken door Conditional Create aan te roepen. Nadat de sleutel succesvol is aangemaakt, ontvangt de gebruiker een melding, afhankelijk van de wachtwoordbeheerder.
Verenigbaarheid
Voorwaardelijk maken wordt ondersteund door Safari op macOS en iOS , en door Chrome op desktop .
Voorwaardelijke creatie implementeren
Het automatisch aanmaken van een sleutel is gebaseerd op een WebAuthn API-functie genaamd Conditional Create . Dit zijn reguliere WebAuthn create()
-verzoeken met de mediation
ingesteld op "conditional"
. Dit werkt op een vergelijkbare manier als het automatisch invullen van sleutels voor get()
verzoeken.
Gebruik Voorwaardelijk aanmaken nadat de gebruiker zich met een wachtwoord heeft aangemeld. Of het aanmaken slaagt, hangt af van de wachtwoordbeheerder en bepaalde voorwaarden waaraan moet worden voldaan. Deze voorwaarden kunnen per wachtwoordbeheerder verschillen en in de loop van de tijd veranderen. In Chrome met Google Password Manager (GPM) moet de gebruiker zich bijvoorbeeld recent hebben aangemeld met een opgeslagen wachtwoord voor de site.
Als de browser de sleutel succesvol aanmaakt, retourneert deze een openbare sleutelreferentie. Stuur deze referentie naar uw backend om de registratie te voltooien en toekomstige authenticatie in te schakelen.
Functiedetectie
U kunt bepalen of Conditional Create beschikbaar is in de browser door PublicKeyCredential.getClientCapabilities()
aan te roepen. Controleer of een geretourneerd object true
bevat voor de eigenschap conditionalCreate
.
if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.conditionalCreate) {
// Conditional create is available
}
}
Als getClientCapabilities
niet beschikbaar is, is Conditional Create ook niet beschikbaar.
Een toegangssleutel voorwaardelijk aanmaken
Om automatisch een sleutel aan te maken, roept u navigator.credentials.create()
aan, maar dan met mediation: "conditional"
zoals hier.
const cred = await navigator.credentials.create({
publicKey: options,
// Request conditional creation
mediation: 'conditional'
});
U dient het automatisch aanmaken van een wachtwoordsleutel direct uit te voeren nadat de gebruiker zich heeft aangemeld. Zo is de kans het grootst dat deze aan de criteria van de wachtwoordbeheerder voor automatisch aanmaken voldoet.
U kunt de resulterende openbare sleutelreferentie naar de server sturen om de toegangscode te verifiëren en te registreren . Zorg ervoor dat de gebruiker op de server is aangemeld.
Voorbehouden
Conditional Create is op zichzelf niet moeilijk te implementeren, maar er zijn enkele kanttekeningen bij het daadwerkelijk integreren van deze functie in een bestaand systeem.
Negeer de aanwezigheid en verificatie van gebruikers op de server
Het registratieantwoord retourneert zowel "Gebruikersaanwezigheid" als "Gebruiker geverifieerd" als false
. De server moet deze vlaggen dus negeren tijdens de verificatie van de inloggegevens .
Een lopende WebAuthn-aanroep afbreken voordat u automatisch een wachtwoord aanmaakt
Wanneer de RP verwacht dat de gebruiker zich aanmeldt met een wachtwoord of een sleutel, is het uitvoeren van een voorwaardelijke get de beste keuze . Dit kan ertoe leiden dat de voorwaardelijke get-aanroep wordt geannuleerd voordat een voorwaardelijke create wordt uitgevoerd.
Om dit te doen, moet u AbortController
gebruiken en .abort()
aanroepen.
// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();
const cred = await navigator.credentials.get({
publicKey: options,
signal: controller.signal,
// Request conditional get
mediation: 'conditional'
});
// Abort the call
controller.abort();
Negeer de uitzonderingen met gratie
Wanneer een voorwaardelijke toegangssleutel wordt aangemaakt, zijn er een paar gevallen waarin u uitzonderingen moet negeren:
-
InvalidStateError
: Er bestaat al een sleutel in de sleutelprovider (vergeet niet omexcludeCredentials
op te geven). -
NotAllowedError
: Het maken van een sleutel voldoet niet aan de voorwaarde. -
AbortError
: De WebAuthn-aanroep is afgebroken.
Het weergeven van fouten kan in dergelijke gevallen verwarrend zijn voor de gebruiker, omdat de browser deze in stilte verwerkt: er wordt alleen een melding weergegeven als de handeling is geslaagd, en bij fouten worden geen zichtbare berichten gegenereerd.
Signaal wanneer het registreren van een toegangscode mislukt
Wanneer een toegangssleutel is aangemaakt maar niet kan worden geregistreerd op de server, mislukt de aanmeldingspoging van de gebruiker. Dit kan gebeuren wanneer de lijst met toegangssleutels van de toegangssleutelprovider en de server niet consistent is.
Om dit soort situaties te voorkomen, kunt u de Signal API gebruiken om de waarden consistent te houden .
Upgraden van wachtwoordloze aanmeldingen wordt niet ondersteund
Op dit punt wordt het aanmaken van een sleutel voorwaardelijk geblokkeerd nadat de gebruiker een geldig wachtwoord heeft ingevoerd. Dit betekent dat wachtwoordloze inlogmethoden zoals magische links, telefoonnummerverificatie of identiteitsfederatie niet aan de voorwaarde voldoen.
Samenvatting
Het automatisch aanmaken van een wachtwoordsleutel kan de acceptatie van wachtwoorden op uw website versnellen, waardoor gebruikers gemakkelijker de overstap kunnen maken van wachtwoorden naar een veiligere authenticatiemethode.
Wilt u meer weten over wachtwoordsleutels, begin dan bij Wachtwoordloos inloggen met wachtwoordsleutels .