यह पेज अपने-आप अनुवादित किया गया है। मूल अंग्रेज़ी संस्करण पढ़ें यहाँ.

Passkeys चीटशीट. passkey कार्यक्रमों के लिए व्यावहारिक मार्गदर्शन, रोलआउट पैटर्न और KPIs।
2024 में डिजिटल कंपनियों के लिए सुरक्षित और सरल यूज़र ऑथेंटिकेशन प्रदान करना बहुत ज़रूरी है। पासकी (Passkeys), नए लॉगिन मानक के रूप में, इन ज़रूरतों को पूरा करने के लिए आदर्श समाधान हैं। हालाँकि, यूज़र के लिए पासकी का बेहतर यूज़र एक्सपीरियंस और सुरक्षा एक डेवलपर के रूप में उन्हें लागू करने की कीमत पर आता है। इम्प्लीमेंटेशन में कठिनाई इस तथ्य से उत्पन्न होती है कि पासकी अपेक्षाकृत नई हैं - यूज़र्स के लिए भी, और डेवलपर्स के लिए भी और पासवर्ड-आधारित ऑथेंटिकेशन की तुलना में उनका इम्प्लीमेंटेशन काफी चुनौतीपूर्ण हो सकता है। वास्तव में, पासवर्ड ऑथेंटिकेशन के लिए एक API एंडपॉइंट की तुलना में आपको पासकी ऑथेंटिकेशन के लिए कम से कम चार API एंडपॉइंट्स की आवश्यकता होती है।
पासकी ऑथेंटिकेशन प्रदान करने के लिए सर्वर साइड पर मुख्य घटकों में से एक WebAuthn सर्वर (ग्रीन लाइब्रेरी भाग) है। WebAuthn सर्वर व्यापक एंटरप्राइज़ स्टैक इंटीग्रेशन में कैसे फिट बैठता है, इस पर एक व्यापक गाइड के लिए, हमारा समर्पित लेख देखें।
स्रोत: Yubico
इस ब्लॉग पोस्ट में, हम कई WebAuthn सर्वर लाइब्रेरी / पैकेज / SDKs की तुलना करते हैं, अंतरों का विश्लेषण करते हैं और पासकी इम्प्लीमेंटेशन में नए डेवलपर्स के लिए एक सिफारिश प्रदान करते हैं।
यह बेहतर ढंग से समझने के लिए कि सबसे पहले WebAuthn सर्वर लाइब्रेरी की आवश्यकता क्यों है, आइए देखें कि पासकी कैसे लागू की जा सकती हैं। सिद्धांत रूप में, वेबसाइटों और ऐप्स में पासकी को इंटिग्रेट करने के दो तरीके हैं:
यद्यपि थर्ड-पार्टी पासकी समाधान को इंटिग्रेट करना आसान है और आमतौर पर बहुत सारा इंजीनियरिंग समय बचाता है (विशेषकर एज केस, रखरखाव, रिकवरी, फ़ॉलबैक और बेहतर पासकी UX के लिए), कुछ डेवलपर्स सब कुछ खुद लागू करना पसंद करते हैं।
Live demo में passkeys आज़माएं.
आइए देखें कि डू-इट-योरसेल्फ (do-it-yourself) पासकी इम्प्लीमेंटेशन कैसे काम करता है। एक बहुत ही बुनियादी सेटअप में, रजिस्टर (साइन-अप) और ऑथेंटिकेट (लॉगिन) करने के लिए एक तंत्र की आवश्यकता होती है। दोनों प्रक्रियाओं, जिन्हें WebAuthn सेरेमनीज़ (ceremonies) भी कहा जाता है, को अलग-अलग तरीके से हैंडल किया जाता है, भले ही समग्र प्रवाह एक समान स्कीमा का अनुसरण करता है:
चूँकि हर साइन-अप / लॉगिन प्रक्रिया में ये चरण शामिल होते हैं, इसलिए बैकएंड को यूज़र्स, पासकीज़ और साइन-अप / लॉगिन अनुरोधों का ट्रैक रखने की आवश्यकता होती है।
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.
Read the case studyयदि आप इस बारे में अधिक गहन ज्ञान प्राप्त करना चाहते हैं कि पासकी कैसे काम करती हैं और एक सरल इम्प्लीमेंटेशन कैसा दिखता है (थर्ड-पार्टी पासकी समाधान का उपयोग किए बिना), तो आप यहाँ हमारे ब्लॉग लेख की जांच कर सकते हैं।
वास्तविक जीवन के परिदृश्यों में, जब आप स्वयं पासकी लागू करते हैं, तो ध्यान रखें कि यह केवल साइन अप और लॉगिन करने के लिए आवश्यक API एंडपॉइंट्स और बुनियादी इम्प्लीमेंटेशन प्रदान करने के बारे में नहीं है। इसके अलावा, आपको निम्नलिखित विषयों और उपयोग के मामलों को संबोधित करने की आवश्यकता है:
हालांकि, बुनियादी पासकी इम्प्लीमेंटेशन के लिए, आपको केवल WebAuthn मानक का पालन करने की आवश्यकता है। एक प्रसिद्ध और समर्थित WebAuthn सर्वर लाइब्रेरी को लागू करना आमतौर पर पर्याप्त होता है। लाइब्रेरी WebAuthn सर्वर पैरामीटर जेनरेट करती है और लॉगिन चैलेंजेस को वेरीफाई करती है, अनिवार्य रूप से आपके लिए क्रिप्टोग्राफ़िक और सबसे जटिल हिस्से को अपने हाथ में ले लेती है।
Updates और support के लिए हमारी Passkeys Community से जुड़ें.
सभी विश्लेषित WebAuthn सर्वर लाइब्रेरी पासकी ऑथेंटिकेशन प्रदान करने के लिए आवश्यक कार्यक्षमताएं प्रदान करती हैं। इसलिए, हमने निम्नलिखित मानदंडों पर विशेष ध्यान दिया है:
निम्नलिखित WebAuthn सर्वर लाइब्रेरी का विश्लेषण किया गया (दिसंबर 2023 में GitHub स्टार्स की घटती संख्या के आधार पर ऑर्डर किया गया):
देखें कि वास्तव में कितने लोग passkeys इस्तेमाल करते हैं.
type UserModel = { id: string; username: string; currentChallenge?: string; }; /** * It is strongly advised that authenticators get their own DB * table, ideally with a foreign key to a specific UserModel. * * "SQL" tags below are suggestions for column data types and * how best to store data received during registration for use * in subsequent authentications. */ type Authenticator = { // SQL: Encode to base64url then store as `TEXT`. Index this column credentialID: Uint8Array; // SQL: Store raw bytes as `BYTEA`/`BLOB`/etc... credentialPublicKey: Uint8Array; // SQL: Consider `BIGINT` since some authenticators return atomic timestamps as counters counter: number; // SQL: `VARCHAR(32)` or similar, longest possible value is currently 12 characters // Ex: 'singleDevice' | 'multiDevice' credentialDeviceType: CredentialDeviceType; // SQL: `BOOL` or whatever similar type is supported credentialBackedUp: boolean; // SQL: `VARCHAR(255)` and store string array as a CSV string // Ex: ['usb' | 'ble' | 'nfc' | 'internal'] transports?: AuthenticatorTransport[]; };
public class StoredCredential { /// <summary> /// The Credential ID of the public key credential source. /// </summary> public byte[] Id { get; set; } /// <summary> /// The credential public key of the public key credential source. /// </summary> public byte[] PublicKey { get; set; } /// <summary> /// The latest value of the signature counter in the authenticator data from any ceremony using the public key credential source. /// </summary> public uint SignCount { get; set; } /// <summary> /// The value returned from getTransports() when the public key credential source was registered. /// </summary> public AuthenticatorTransport[] Transports { get; set; } /// <summary> /// The value of the BE flag when the public key credential source was created. /// </summary> public bool IsBackupEligible { get; set; } /// <summary> /// The latest value of the BS flag in the authenticator data from any ceremony using the public key credential source. /// </summary> public bool IsBackedUp { get; set; } /// <summary> /// The value of the attestationObject attribute when the public key credential source was registered. /// Storing this enables the Relying Party to reference the credent’al's attestation statement at a later time. /// </summary> public byte[] AttestationObject { get; set; } /// <summary> /// The value of the clientDataJSON attribute when the public key credential source was registered. /// Storing this in combination with the above attestationObject item enables the Relying Party to re-verify the attestation signature at a later time. /// </summary> public byte[] AttestationClientDataJson { get; set; } public List<byte[]> DevicePublicKeys { get; set; } public byte[] UserId { get; set; } public PublicKeyCredentialDescriptor Descriptor { get; set; } public byte[] UserHandle { get; set; } public string AttestationFormat { get; set; } public DateTimeOffset RegDate { get; set; } public Guid AaGuid { get; set; } }
<?php declare(strict_types=1); namespace App\Entity; use App\Repository\PublicKeyCredentialSourceRepository; use DateTimeImmutable; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Uid\AbstractUid; use Symfony\Component\Uid\Uuid; use Webauthn\PublicKeyCredentialSource as BasePublicKeyCredentialSource; use Webauthn\TrustPath\TrustPath; #[ORM\Table(name: 'pk_credential_sources')] #[ORM\Entity(repositoryClass: PublicKeyCredentialSourceRepository::class)] class PublicKeyCredentialSource extends BasePublicKeyCredentialSource { #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] public readonly DateTimeImmutable $createdAt; #[ORM\Id] #[ORM\Column(type: Types::STRING, length: 255)] #[ORM\GeneratedValue(strategy: 'NONE')] private string $id; public function __construct( string $publicKeyCredentialId, string $type, array $transports, string $attestationType, TrustPath $trustPath, AbstractUid $aaguid, string $credentialPublicKey, string $userHandle, int $counter ) { $this->id = Uuid::v4()->toRfc4122(); $this->createdAt = new DateTimeImmutable(); parent::__construct($publicKeyCredentialId, $type, $transports, $attestationType, $trustPath, $aaguid, $credentialPublicKey, $userHandle, $counter); } public function getId(): string { return $this->id; } }
निम्नलिखित तालिका WebAuthn सर्वर लाइब्रेरीज़ का अवलोकन (overview) प्रदान करती है:
Latest news के लिए हमारे Passkeys Substack को subscribe करें.
चूँकि अधिकांश लाइब्रेरीज़ समान रूप से शक्तिशाली हैं और WebAuthn मानक को लागू करती हैं, इसलिए हम निम्नलिखित निर्णय-वृक्ष (decision-tree) की अनुशंसा करते हैं:
यदि आप पहले से ही किसी विशिष्ट प्रोजेक्ट के बिना सामान्य रूप से WebAuthn सर्वर के बारे में अधिक जानना चाहते हैं तो हम कुछ सिफारिशें कर सकते हैं क्योंकि लाइब्रेरीज़ और उनके पूरक सामग्री (जैसे दस्तावेज़ और उदाहरण इम्प्लीमेंटेशन) के बीच कुछ अंतर हैं। तो, पासकी इम्प्लीमेंटेशन यात्रा को शुरू करने के इच्छुक सॉफ़्टवेयर डेवलपर्स के लिए, हम निम्नलिखित इम्प्लीमेंटेशन चुनने की सलाह देते हैं:
सर्वर साइड पर WebAuthn कैसे काम करता है, इसकी और भी गहरी समझ के लिए, आप WebAuthn RFC में WebAuthn Relying Party Operations के बहुत विस्तृत अनुभाग को पढ़ सकते हैं जो नया क्रेडेंशियल रजिस्टर करने (7.1) और ऑथेंटिकेशन असर्शन असर्शन को वेरीफाई करने (7.2) के लिए लागू किए जाने वाले प्रत्येक चरण का विवरण देता है।
आपके पास मौजूद विशिष्ट पासकी और WebAuthn आवश्यकताओं का मूल्यांकन करें। इस ब्लॉग पोस्ट में, हमने माना है कि आप केवल डिस्कवरेबल क्रेडेंशियल्स (discoverable credentials) के रूप में पासकीज़ का समर्थन करना चाहते हैं। आपके उपयोग के मामले के लिए WebAuthn सर्वर SDK कॉन्फ़िगरेशन में पैरामीटर सही ढंग से सेट करने के लिए क्लाइंट-साइड navigator.credentials.create() और navigator.credentials.get() WebAuthn API कॉल्स के साथ PublicKeyCredentialCreationOptions और PublicKeyCredentialRequestOptions के बारे में पढ़ें।
सभी WebAuthn सर्वर लाइब्रेरीज़ के लिए, आपको निम्नलिखित जानकारी को परसिस्ट (persist) / एक्सेस करने के लिए उचित डेटाबेस संरचना प्रदान करने की आवश्यकता होगी:
कुछ लाइब्रेरीज़ के लिए, विशिष्ट सिफारिशें और उदाहरण हैं (यदि हमने उन्हें उपयोगी पाया, तो हमने उन्हें ऊपर प्रदान किया है)। यह पूरी तरह से समझना आवश्यक है कि कौन से WebAuthn फ़ील्ड कहाँ स्टोर किए जाने हैं। यह पहचानने पर विशेष ध्यान दें कि आप User ID (user.id) के लिए किस मान का उपयोग करना चाहते हैं। यहाँ हमारे पास एक अधिक विस्तृत स्पष्टीकरण है। इस बात पर भी विचार करें कि क्या होता है जब कोई यूज़र पासकी हटा सकता है। इसके अलावा, आप वैकल्पिक रूप से कुछ ऑथेंटिकेटर्स के उपयोग को सीमित कर सकते हैं। पासकीज़ से संबंधित मान्य ऑथेंटिकेटर्स की एक सूची यहाँ पाई जा सकती है। यदि आप सुरक्षा कुंजियों के अटेस्टेशन्स (attestations) का समर्थन और जांच भी करना चाहते हैं, तो यह एक पूरी तरह से अलग कहानी है। आप यहाँ अधिक जानकारी पा सकते हैं।
पहचानें कि आपके उपयोगकर्ता किन उपकरणों पर पासकी और फ़ॉलबैक ऑथेंटिकेशन विधियों का उपयोग करेंगे। यदि आप सुनिश्चित नहीं हैं कि आपके उपयोगकर्ता किन डिवाइस, ब्राउज़र और ऑपरेटिंग सिस्टम का उपयोग करते हैं, तो प्लेटफ़ॉर्म, ब्राउज़र और ऑपरेटिंग सिस्टम में पासकी-रेडीनेस के नवीनतम डेटा के लिए State of Passkeys देखें। यदि आपके पास पासकी एडॉप्शन और कुछ डिवाइस के पासकी-रेडीनेस शेयर पर विशिष्ट प्रश्न हैं, तो बेझिझक हमसे संपर्क करें। हमें आपको और अधिक जानकारी प्रदान करने और इस विषय पर आपकी सहायता करने में खुशी होगी (पासकी-रेडीनेस के संबंध में हमारी नवीनतम ब्लॉग पोस्ट भी देखें)। एक ऑब्सर्वेबिलिटी (observability) के दृष्टिकोण से, क्लाइंट-साइड WebAuthn विफलताओं और सर्वर वेरिफिकेशन अस्वीकृतियों (rejects) को अलग-अलग स्ट्रीम के रूप में रखें; क्लाइंट-साइड बकेट परिभाषाओं के लिए, WebAuthn त्रुटियों का उपयोग करें। इसके अलावा, आपको ध्यान में रखना चाहिए कि Windows 10 और Linux के लिए आपको समर्पित समाधान (dedicated solutions) के साथ आने की आवश्यकता होगी क्योंकि ये ऑपरेटिंग सिस्टम कम से कम (यदि बिल्कुल भी) पासकी सपोर्ट प्रदान करते हैं।
देखें कि वास्तव में कितने लोग passkeys इस्तेमाल करते हैं.
अब तक लगभग हर भाषा या फ्रेमवर्क के लिए एक अच्छी तरह से स्थापित WebAuthn सर्वर लाइब्रेरी मौजूद है। विभिन्न भाषाओं के पुस्तकालयों की तुलना करने पर कुछ कार्यान्वयनों की कोई स्पष्ट श्रेष्ठता (superiority) नहीं दिखाई देती है। बल्कि आपको उस फ्रेमवर्क / प्रोग्रामिंग भाषा का उपयोग करना चाहिए जिससे आप सबसे अधिक परिचित हैं। वैकल्पिक रूप से, यदि आप WebAuthn को स्वयं लागू नहीं करना चाहते हैं और साथ आने वाले सभी चीज़ों का ध्यान रखना चाहते हैं, तो आप Corbado जैसे एक समर्पित, प्री-बिल्ट पासकी-ऑथेंटिकेशन समाधान आज़मा सकते हैं। एक पासकी केंद्रित ऑल-इन-वन ऑथेंटिकेशन समाधान प्रस्तुत करते हुए, यह शानदार पासकी इंटेलिजेंस (passkey intelligence), सत्र प्रबंधन के साथ-साथ फ़ॉलबैक ऑथेंटिकेशन विधियों के साथ आता है, ताकि आप अपने उत्पाद को विकसित करने पर ध्यान केंद्रित कर सकें और ऑथेंटिकेशन की चिंता छोड़ सकें। आप इसे असीमित उपयोगकर्ताओं के साथ मुफ़्त में यहाँ आज़मा सकते हैं।
Corbado बड़े पैमाने पर consumer authentication चलाने वाली CIAM टीमों के लिए Authentication Intelligence Platform है। हम आपको वह दिखाते हैं जो IDP logs और सामान्य analytics tools नहीं दिखा सकते: कौन-से devices, OS versions, browsers और credential managers passkeys को support करते हैं, क्यों enrollments login में नहीं बदलते, WebAuthn flow कहाँ fail होता है, और कब कोई OS या browser update चुपचाप login को तोड़ देता है — और यह सब Okta, Auth0, Ping, Cognito या आपके in-house IDP को बदले बिना। दो products: Corbado Observe जोड़ता है passkeys और किसी भी अन्य login method के लिए observability। Corbado Connect देता है analytics के साथ built-in managed passkeys (आपके IDP के साथ-साथ)। VicRoads, Corbado के साथ 5M+ users के लिए passkeys चला रहा है (+80% passkey activation)। Passkey विशेषज्ञ से बात करें →
पहले जांचें कि क्या आपके विशिष्ट फ्रेमवर्क के लिए कोई लाइब्रेरी मौजूद है, फिर अपनी प्रोग्रामिंग भाषा के लिए जांचें। चूंकि सभी सूचीबद्ध लाइब्रेरी WebAuthn मानक को समान रूप से लागू करती हैं, इसलिए चुनाव में लाइब्रेरी के बीच फीचर अंतर के बजाय आपके मौजूदा स्टैक के साथ परिचितता को प्राथमिकता दी जानी चाहिए।
कम से कम आपको क्रेडेंशियल्स, यूज़र्स, चैलेंजेस और ऑथेंटिकेटर्स को स्टोर करना होगा। इस बात पर पूरा ध्यान दें कि आप User ID (userHandle) के रूप में कौन सा मान निर्दिष्ट करते हैं, और उन परिदृश्यों की योजना बनाएं जहां उपयोगकर्ता अपने डिवाइस से पासकी हटा सकते हैं।
WebAuthn सर्वर लाइब्रेरी सबसे जटिल क्रिप्टोग्राफिक ऑपरेशन्स को संभालती हैं: PublicKeyCredentialCreationOptions और PublicKeyCredentialRequestOptions पैरामीटर जेनरेट करना और साइन किए गए चैलेंजेस को वेरीफाई करना। इसे शुरुआत से सही ढंग से करना किसी ऐसे FIDO-अनुरूप लाइब्रेरी का उपयोग करने की तुलना में काफी कठिन है जिसका पहले से ही परीक्षण और ऑडिट किया जा चुका है।
Windows 10 और Linux सबसे कम पासकी सपोर्ट प्रदान करते हैं, इसलिए इन प्लेटफॉर्म के उपयोगकर्ताओं के लिए समर्पित फॉलबैक समाधान की आवश्यकता होती है। प्रोडक्शन में OS-विशिष्ट समस्याओं की पहचान करने के लिए क्लाइंट-साइड WebAuthn विफलताओं और सर्वर वेरिफिकेशन अस्वीकृतियों की अलग-अलग स्ट्रीम के रूप में निगरानी करना मदद करता है।
संबंधित लेख
विषय सूची