Bitwarden senha sem senha.
Usar senha sem senha.dev significa que não há necessidade de ler extensa documentação de especificação W3C, determinar qual criptografia implementar ou se preocupar em gerenciar chaves públicas armazenadas. A equipe por trás de Bitwarden cuidará disso para você.
O projeto passwordless-server contém as APIs, o banco de dados e outros itens de infraestrutura principal necessários para o back-end de todos os clientes sem senha.
Você pode experimentar um aplicativo de demonstração, alimentado por senha sem senha.dev no Demo.passwordless.dev. Você também pode assistir ao vídeo abaixo:
Para começar a usar a senha sem senha.dev:
Você pode usar a senha sem senha em conjunto com uma variedade de plataformas de back -end diferentes - consulte a documentação para obter mais informações. Abaixo está um exemplo de integração de back -end usando asp.net Core e o SDK sem senha para .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
} ;
}
} ) ;Termine a configuração de seus fluxos de registro e assinatura usando o cliente sem senha no seu front -end. Também fornecemos integrações de primeira parte para várias estruturas de front-end-consulte a documentação para obter mais informações. Abaixo está um exemplo simples usando JavaScript de baunilha:
Instalar :
$ npm install @passwordlessdev/passwordless-clientEndpoint de inscrição :
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 ) ;Endpoint de assinatura :
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";
} Congratulamo -nos com contribuições de código! Por favor, comprometa quaisquer solicitações de tração contra o ramo main . Todas as alterações requerem testes que provam o comportamento pretendido. Observe que grandes alterações de código e unidades de trabalho têm menos probabilidade de serem mescladas devido à carga de revisão.
Auditorias de segurança e feedback são bem -vindos. Abra um problema ou envie um email em particular se o relatório for de natureza sensível. Você pode ler nossa política de segurança no arquivo Security.md. Também executamos um programa no Hackerone.
Nenhuma concessão de quaisquer direitos nas marcas comerciais, marcas de serviço ou logotipos do Bitwarden é feita (exceto o necessário para cumprir os requisitos de aviso conforme aplicável), e o uso de quaisquer marcas comerciais da Bitwarden devem cumprir as diretrizes de marca registrada da Bitwarden.
Consulte Contribuindo.md
Consulte o diretório de auto-hospedagem para obter instruções sobre como senha de auto-host.dev.
Se você precisar de suporte da equipe sem senha.dev, envie -nos uma mensagem em [email protected].