bitwarden passwordless.dev เป็นชุดเครื่องมือซอฟต์แวร์ที่ช่วยให้นักพัฒนาสร้างคุณสมบัติ passkeys fido2 webauthn สำหรับการไหลของการตรวจสอบอย่างไร้รอยต่อ
การใช้ Passwordless.dev หมายความว่าไม่จำเป็นต้องอ่านเอกสารข้อกำหนด W3C ที่กว้างขวางกำหนดว่าการเข้ารหัสที่จะนำไปใช้หรือกังวลเกี่ยวกับการจัดการคีย์สาธารณะที่เก็บไว้ ทีมที่อยู่เบื้องหลัง Bitwarden จะดูแลคุณ
โครงการ passwordless-server ประกอบด้วย APIs ฐานข้อมูลและรายการโครงสร้างพื้นฐานหลักอื่น ๆ ที่จำเป็นสำหรับแบ็กเอนด์ของไคลเอนต์ที่ไม่มีรหัสผ่านทั้งหมด
คุณสามารถลองใช้แอปพลิเคชันเว็บแบบสาธิตโดยใช้รหัสผ่านแบบไม่ผ่านที่ Demo.Passwordless.dev นอกจากนี้คุณยังสามารถดูวิดีโอด้านล่าง:
ในการเริ่มต้นใช้ passwordless.dev:
คุณสามารถใช้รหัสผ่านโดยใช้ร่วมกับแพลตฟอร์มแบ็กเอนด์ที่หลากหลาย - ดูเอกสารสำหรับข้อมูลเพิ่มเติม ด้านล่างเป็นตัวอย่างของการรวมแบ็กเอนด์โดยใช้ ASP.NET Core และ 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
} ;
}
} ) ;เสร็จสิ้นการตั้งค่าการลงทะเบียนและลงชื่อเข้าใช้โดยใช้ไคลเอนต์ที่ไม่มีรหัสผ่านในส่วนหน้าของคุณ นอกจากนี้เรายังให้การรวมกลุ่มแรกสำหรับกรอบส่วนหน้าหลาย ๆ อย่างเช่นกัน-ดูเอกสารสำหรับข้อมูลเพิ่มเติม ด้านล่างเป็นตัวอย่างง่ายๆโดยใช้ 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 นอกจากนี้เรายังเรียกใช้โปรแกรมบน Hackerone
ไม่มีการให้สิทธิ์ใด ๆ ในเครื่องหมายการค้าเครื่องหมายบริการหรือโลโก้ของ Bitwarden (ยกเว้นตามที่จำเป็นเพื่อให้สอดคล้องกับข้อกำหนดการแจ้งให้ทราบตามความเหมาะสม) และการใช้เครื่องหมายการค้า Bitwarden ใด ๆ จะต้องปฏิบัติตามแนวทางปฏิบัติของ Bitwarden
ดูการสนับสนุน. md
ดูไดเรกทอรีโฮสต์ตัวเองสำหรับคำแนะนำเกี่ยวกับวิธีการโฮสต์รหัสผ่านแบบไม่เป็นเจ้าภาพ
หากคุณต้องการการสนับสนุนจากทีม Passwordless.dev ส่งข้อความถึงเราที่ [email protected]