पासवर्ड खाता सुरक्षा की सबसे कमजोर कड़ी हैं। उन्हें फ़िशिंग, लीक, पुन: उपयोग या भुलाया जा सकता है। इसीलिए हमने WebAuthn Passkeys के लिए समर्थन जोड़ा है - एक फ़िशिंग-प्रतिरोधी, पासवर्ड-रहित प्रमाणीकरण विधि जो अधिक सुरक्षित और अधिक सुविधाजनक दोनों है।

Passkeys क्या हैं?

Passkeys आपके डिवाइस (फोन, लैपटॉप, सुरक्षा कुंजी) पर संग्रहीत क्रिप्टोग्राफिक क्रेडेंशियल्स हैं जो प्रमाणीकरण के लिए पासवर्ड की जगह लेते हैं। वे WebAuthn मानक (FIDO2 का हिस्सा) का उपयोग करते हैं और कई लाभ प्रदान करते हैं:

  • फ़िशिंग-प्रतिरोधी - Passkeys वेबसाइट के डोमेन से जुड़े होते हैं, इसलिए उन्हें नकली साइटों पर उपयोग नहीं किया जा सकता
  • लीक होने के लिए कोई रहस्य नहीं - सर्वर पर केवल सार्वजनिक कुंजी संग्रहीत होती है
  • डिवाइस-बाउंड - निजी कुंजी कभी आपके डिवाइस को नहीं छोड़ती
  • बायोमेट्रिक-संरक्षित - आमतौर पर Face ID, Touch ID, या Windows Hello द्वारा सुरक्षित
  • क्रॉस-डिवाइस सिंक - आधुनिक प्लेटफॉर्म iCloud, Google, या Microsoft खातों के माध्यम से डिवाइस में Passkeys को सिंक करते हैं

हमारा कार्यान्वयन

हमने WebAuthn Passkeys समर्थन को अपने मौजूदा django-allauth प्रमाणीकरण स्टैक में एकीकृत किया, वेब और मोबाइल API दोनों एंडपॉइंट प्रदान करते हुए।

पंजीकरण प्रवाह

जब कोई उपयोगकर्ता नया Passkey पंजीकृत करता है, तो प्रवाह इस प्रकार काम करता है:

  1. क्लाइंट सर्वर से पंजीकरण विकल्पों का अनुरोध करता है
  2. सर्वर उपयोगकर्ता और रिलाइंग पार्टी जानकारी के साथ चुनौती उत्पन्न करता है
  3. ब्राउज़र की WebAuthn API उपयोगकर्ता को संकेत देती है (बायोमेट्रिक या सुरक्षा कुंजी)
  4. क्लाइंट क्रेडेंशियल को सर्वर पर वापस भेजता है
  5. सर्वर सत्यापित करता है और सार्वजनिक कुंजी संग्रहीत करता है
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# API endpoint to begin registration
class WebAuthnRegistrationOptionsView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        from allauth.mfa.webauthn.internal import auth as webauthn_auth

        # Generate credential creation options
        creation_options = webauthn_auth.begin_registration(
            request.user,
            passwordless=False  # Use as 2FA, not passwordless
        )

        return Response({
            "success": True,
            "creation_options": creation_options,
        })

प्रमाणीकरण प्रवाह

Passkey का उपयोग करके द्वि-कारक प्रमाणीकरण के लिए:

  1. उपयोगकर्ता प्राथमिक प्रमाणीकरण पूरा करता है (उपयोगकर्ता नाम/पासवर्ड या सोशल लॉगिन)
  2. सर्वर WebAuthn सत्यापन के लिए चुनौती लौटाता है
  3. ब्राउज़र Passkey का अनुरोध करता है (बायोमेट्रिक स्पर्श)
  4. क्रेडेंशियल को संग्रहीत सार्वजनिक कुंजी के विरुद्ध सत्यापित किया जाता है
  5. उपयोगकर्ता पूरी तरह से प्रमाणित है
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class WebAuthnVerifyView(APIView):
    def post(self, request):
        credential = request.data.get("credential")

        # Complete authentication and verify credential
        authenticator = webauthn_auth.complete_authentication(
            request.user,
            credential
        )

        # Record usage for security monitoring
        authenticator.last_used_at = timezone.now()
        authenticator.save()

        return Response({"success": True})

Passkey प्रबंधन

उपयोगकर्ता अपने पंजीकृत Passkeys का प्रबंधन कर सकते हैं:

  • सभी Passkeys की सूची पंजीकरण तिथि और अंतिम उपयोग के साथ
  • Passkeys का नाम बदलें आसान पहचान के लिए (जैसे, “iPhone”, “MacBook”)
  • Passkeys हटाएं (अंतिम प्रमाणक को हटाने से सुरक्षा के साथ)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class WebAuthnListView(APIView):
    def get(self, request):
        authenticators = Authenticator.objects.filter(
            user=request.user,
            type=Authenticator.Type.WEBAUTHN
        ).order_by("-created_at")

        return Response({
            "passkeys": [
                {
                    "id": auth.pk,
                    "name": auth.wrap().name,
                    "created_at": auth.created_at.isoformat(),
                    "last_used_at": auth.last_used_at.isoformat() if auth.last_used_at else None,
                }
                for auth in authenticators
            ]
        })

API एंडपॉइंट्स

हमारी REST API मोबाइल ऐप के लिए पूर्ण WebAuthn समर्थन प्रदान करती है:

एंडपॉइंटविधिविवरण
/api/webauthn/register/options/GETपंजीकरण चुनौती प्राप्त करें
/api/webauthn/register/complete/POSTपंजीकरण पूर्ण करें
/api/webauthn/authenticate/options/GETप्रमाणीकरण चुनौती प्राप्त करें
/api/webauthn/verify/POST2FA के लिए क्रेडेंशियल सत्यापित करें
/api/webauthn/GETपंजीकृत Passkeys की सूची
/api/webauthn/<id>/PATCHPasskey का नाम बदलें
/api/webauthn/<id>/DELETEPasskey हटाएं

सुरक्षा विचार

रिकवरी कोड

जब कोई उपयोगकर्ता अपना पहला प्रमाणक (Passkey या TOTP) पंजीकृत करता है, तो हम स्वचालित रूप से रिकवरी कोड उत्पन्न करते हैं। इन एक बार उपयोग होने वाले कोड का उपयोग तब किया जा सकता है जब अन्य सभी प्रमाणीकरण विधियां अनुपलब्ध हो जाएं:

1
2
if Authenticator.objects.filter(user=request.user).count() == 1:
    auto_generate_recovery_codes(request._request)

लॉकआउट रोकथाम

उपयोगकर्ता अपना अंतिम Passkey नहीं हटा सकते यदि इससे उन्हें बिना किसी द्वि-कारक प्रमाणीकरण विधि के छोड़ दिया जाएगा:

1
2
3
4
if not adapter.can_delete_authenticator(authenticator):
    return Response({
        "message": "Cannot delete - you must have at least one authentication method"
    }, status=400)

निगरानी

हम सुरक्षा निगरानी के लिए Datadog मेट्रिक्स के माध्यम से Passkey उपयोग को ट्रैक करते हैं:

1
2
3
increment("webauthn.registration.success")
increment("webauthn.verify.success")
increment("webauthn.verify.failed")

ब्राउज़र समर्थन

WebAuthn सभी आधुनिक ब्राउज़रों में समर्थित है:

  • Chrome 67+
  • Firefox 60+
  • Safari 13+
  • Edge 79+
  • मोबाइल Chrome, Safari, Firefox

पुराने ब्राउज़रों के लिए, उपयोगकर्ता अभी भी TOTP (प्रमाणक ऐप्स) या रिकवरी कोड का उपयोग कर सकते हैं।

उपयोगकर्ता अनुभव

Passkey जोड़ने में केवल कुछ सेकंड लगते हैं:

  1. सेटिंग्स → सुरक्षा → द्वि-कारक प्रमाणीकरण पर जाएं
  2. Passkey जोड़ें पर क्लिक करें
  3. अपने डिवाइस को नाम दें (जैसे, “iPhone 15”)
  4. Face ID / Touch ID / Windows Hello से प्रमाणित करें
  5. हो गया! आपका Passkey पंजीकृत है

भविष्य के लॉगिन के लिए केवल बायोमेट्रिक पुष्टि की आवश्यकता होती है - पासवर्ड टाइप करने या प्रमाणक ऐप्स से कोड कॉपी करने की आवश्यकता नहीं।

हमने Passkeys क्यों चुने

विधिफ़िशिंग जोखिमउपयोगकर्ता अनुभवरिकवरी
पासवर्डउच्चखराब (भूल गए, कमजोर)ईमेल रीसेट
SMS 2FAमध्यम (SIM स्वैप)ठीकफोन नंबर
TOTP ऐप्सकममैनुअल कोड प्रविष्टिबैकअप कुंजियां
Passkeysबहुत कमउत्कृष्टरिकवरी कोड

Passkeys प्रमाणीकरण के भविष्य का प्रतिनिधित्व करते हैं। वे पहले से ही Apple, Google और Microsoft प्लेटफॉर्म द्वारा समर्थित हैं, जो उन्हें लगभग सभी उपयोगकर्ताओं के लिए सुलभ बनाते हैं।


पासवर्ड-रहित होने के लिए तैयार हैं? अपनी सुरक्षा सेटिंग्स में Passkeys सक्षम करें!