Bitwarden Passwordless.dev ist ein Software -Toolkit, mit dem Entwicklern FIDO2 -WebAuthn -Passkeys -Funktionen für nahtlose Authentifizierungsflüsse erstellen können.
Verwenden von passwordlosen.dev bedeutet, dass keine umfangreiche W3C -Spezifikationsdokumentation gelesen werden muss, welche Kryptographie implementiert werden soll, oder um die Verwaltung gespeicherter öffentlicher Schlüssel zu sorgen. Das Team hinter Bitwarden wird sich dafür darum kümmern.
Das Projekt passwordless-server enthält die APIs, die Datenbank und andere Kerninfrastrukturelemente, die für das Backend aller passwortlosen Clients benötigt werden.
Sie können eine Demo -Web -App ausprobieren, die von passwortlos.dev bei Demo.Passwordless.dev betrieben wird. Sie können sich auch das Video unten ansehen:
Um mit passwortlos zu beginnen.dev:
Sie können passwortlos in Verbindung mit einer Vielzahl verschiedener Backend -Plattformen verwenden. Weitere Informationen finden Sie in der Dokumentation. Im Folgenden finden Sie ein Beispiel für eine Backend -Integration mit ASP.NET Core und dem passwortlosen SDK für .NET:
// Add Passwordless to your service container
services . AddPasswordlessSdk ( options =>
{
options . ApiSecret = "your_api_secret" ;
} ) ;
// ...
// Define the /register endpoint
app . MapGet ( "/register" , async ( IPasswordlessClient passwordless , string alias ) =>
{
// Get existing user ID from session or create a new user in your database
var userId = Guid . NewGuid ( ) . ToString ( ) ;
// Provide the userid and an alias to link to this user
var payload = new RegisterOptions ( userId , alias )
{
// Optional: Link this user ID to an alias (e.g. email)
Aliases = [ alias ]
} ;
try
{
var tokenRegistration = await passwordless . CreateRegisterTokenAsync ( payload ) ;
// Return this token to the frontend
return Ok ( tokenRegistration ) ;
}
catch ( PasswordlessApiException e )
{
return new JsonResult ( e . Details )
{
StatusCode = ( int ? ) e . StatusCode ,
} ;
}
} ) ;
// Define the /signin endpoint
app . MapGet ( "/signin" , async ( IPasswordlessClient passwordless , string token ) =>
{
try
{
var verifiedUser = await passwordless . VerifyTokenAsync ( token ) ;
// Sign the user in, set a cookie, etc
return Ok ( verifiedUser ) ;
}
catch ( PasswordlessApiException e )
{
return new JsonResult ( e . Details )
{
StatusCode = ( int ? ) e . StatusCode
} ;
}
} ) ;Beenden Sie die Einrichten Ihrer Registrierungs- und Signin -Flows, indem Sie den passwortlosen Client in Ihrem Frontend verwenden. Wir bieten auch Erstanbieter-Integrationen für mehrere Frontend-Frameworks-finden Sie in der Dokumentation weitere Informationen. Unten finden Sie ein einfaches Beispiel mit Vanille -JavaScript:
Installation :
$ npm install @passwordlessdev/passwordless-clientRegistrierungsendpunkt :
import Passwordless from '@passwordlessdev/passwordless-client' ;
// Instantiate a passwordless client using your API public key.
const p = new Passwordless . Client ( {
apiKey : "myapplication:public:4364b1a49a404b38b843fe3697b803c8"
} ) ;
// Fetch the registration token from the backend.
const backendUrl = "https://localhost:8002" ;
const registerToken = await fetch ( backendUrl + "/register?userId" + userId ) . then ( r => r . json ( ) ) ;
// Register the token with the end-user's device.
const { token , error } = await p . register ( registerToken ) ;Signin Endpoint :
import Passwordless from '@passwordlessdev/passwordless-client' ;
// Instantiate a passwordless client using your API public key.
const p = new Passwordless . Client ( {
apiKey : 'myapplication:public:4364b1a49a404b38b843fe3697b803c8'
} ) ;
// Generate an authentication token for the user.
// Option 1: Enable browsers to suggest passkeys for any input that has autofill="webauthn" (only works with discoverable passkeys).
const { token , error } = await p . signinWithAutofill ( ) ;
// Option 2: Enables browsers to suggest passkeys by opening a UI prompt (only works with discoverable passkeys).
const { token , error } = await p . signinWithDiscoverable ( ) ;
// Option 3: Use an alias specified by the user.
const email = '[email protected]' ;
const { token , error } = await p . signinWithAlias ( email ) ;
// Option 4: Use a userId if already known, for example if the user is re-authenticating.
const userId = '107fb578-9559-4540-a0e2-f82ad78852f7' ;
const { token , error } = await p . signinWithId ( userId ) ;
if ( error ) {
console . error ( error ) ;
// { errorCode: "unknown_credential", "title": "That credential is not registered with this website", "details": "..."}
}
// Call your backend to verify the token.
const backendUrl = 'https://localhost:8002' ; // Your backend
const verifiedUser = await fetch ( backendUrl + '/signin?token=' + token ) . then ( ( r ) => r . json ( ) ) ;
if ( verifiedUser . success === true ) {
// If successful, proceed!
// verifiedUser.userId = "107fb578-9559-4540-a0e2-f82ad78852f7";
} Wir begrüßen Codebeiträge! Bitte begehen Sie alle Pull -Anfragen gegen die main . Alle Änderungen erfordern Tests, die das beabsichtigte Verhalten beweisen. Bitte beachten Sie, dass große Codeänderungen und Arbeitseinheiten aufgrund der Überprüfungsbelastung weniger fusioniert werden.
Sicherheitsaudits und Feedback sind willkommen. Bitte öffnen Sie ein Problem oder senden Sie uns eine E -Mail privat, wenn der Bericht sensibel ist. Sie können unsere Sicherheitsrichtlinie in der Datei Security.md lesen. Wir führen auch ein Programm auf Hackerone durch.
Es wird keine Gewährung von Rechten in den Marken, Dienstleistungsmarken oder Logos von Bitwarden erstellt (außer wie möglich, um die Bekanntmachungsanforderungen zu erfüllen), und die Verwendung von Bitwarden -Marken muss die Richtlinien für die Bitwarden -Marken entsprechen.
Siehe Beitrag.md
Anweisungen zum Selbsthost-Passwortless.dev finden Sie unter dem Selbsthosting-Verzeichnis.
Wenn Sie Unterstützung beim passwortless.dev -Team benötigen, senden Sie uns eine Nachricht unter [email protected].