Bitwarden PasswordSless.Dev - это программный инструментарий, который помогает разработчикам создавать функции FIDO2 WebAuthn PassKeys для бесшовных потоков аутентификации.
Использование Passwordless.dev означает, что нет необходимости читать обширную документацию по спецификации W3C, определить, какую криптографию следует реализовать, или беспокоиться об управлении хранимыми общественными ключами. Команда позади Bitwarden позаботится об этом для вас.
Проект passwordless-server содержит API, базу данных и другие основные элементы инфраструктуры, необходимые для бэкэнда всех клиентов без паролей.
Вы можете попробовать демо -веб -приложение, работающее от пароля. Ddev over at demo.passwordless.dev. Вы также можете посмотреть видео ниже:
Чтобы начать использовать пароль без пароля.
Вы можете использовать без пароля в сочетании с различными бэкэнд -платформами - см. Документацию для получения дополнительной информации. Ниже приведен пример интеграции бэкэнд с использованием Core ASP.NET и SDK без пароля для .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
} ;
}
} ) ;Завершите настройку регистрации и потоков Signin, используя клиент без пароля на вашем фронте. Мы также предоставляем первые интеграции для нескольких фронтальных рамок-см. Документацию для получения дополнительной информации. Ниже приведен простой пример с использованием ванильного JavaScript:
Установить :
$ npm install @passwordlessdev/passwordless-clientРЕГИСТРАЦИЯ Конечная точка :
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 ) ;Стоина конечная точка :
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";
} Мы приветствуем взносы кода! Пожалуйста, совершите любые запросы на привлечение против main филиала. Все изменения требуют тестов, которые доказывают предполагаемое поведение. Обратите внимание, что крупные изменения кода и единицы работы с меньшей вероятностью будут объединены из -за обзора.
Аудиты безопасности и обратная связь приветствуются. Пожалуйста, откройте проблему или напишите нам в частном порядке, если отчет имеет конфиденциальность по своей природе. Вы можете прочитать нашу политику безопасности в файле Security.md. Мы также запускаем программу на хакероне.
Никакого предоставления никаких прав на товарные знаки, знаки обслуживания или логотипы Bitwarden не предоставляются (за исключением случаев, когда это может быть необходимо для соблюдения требований к уведомлению в зависимости от применимости), и использование любых товарных знаков Bitwarden должно соответствовать руководящим принципам Bitwarden товарные знаки.
См. Appling.md
Смотрите каталог самостоятельного управления для инструкций о том, как самостоятельно без пародий .dev.
Если вам нужна поддержка от команды Passwordsless.dev, отправьте нам сообщение по адресу [email protected].