पोस्टिंग पहुँच के बिना लॉगिन

कुछ ऐप्स को सिर्फ़ यह जानना होता है कि Hive पर कोई व्यक्ति कौन है। वे उसकी ओर से कभी पोस्ट, वोट या कुछ प्रसारित नहीं करते। Hivesigner ऐसे ऐप में लोगों को बिना किसी पोस्टिंग अधिकार के लॉगिन करा सकता है। उपयोगकर्ता साबित करता है कि कोई Hive खाता उसी के नियंत्रण में है। आपका ऐप उसका नाम जान लेता है। यह पन्ना दोनों तरीके और नतीजे को सुरक्षित ढंग से जाँचने का तरीका बताता है।

दो तरीके

  • ऐप खाते के साथ: आपके ऐप का अपना Hive खाता है और वह scope=login माँगता है। टोकन में आपके ऐप का नाम होता है।
  • ऐप खाते के बिना: जिस साइट का अपना Hive खाता नहीं है वह सिर्फ़ एक redirect_uri भेजती है। टोकन में किसी ऐप का नाम नहीं होता। आपकी साइट खुद उसे जाँचती है।

इनमें से किसी के लिए भी उपयोगकर्ता या आपके ऐप खाते की अनुमति नहीं चाहिए, इसलिए उपयोगकर्ता के खाते में कुछ नहीं बदलता। Hivesigner लॉगिन को पोस्टिंग कुंजी से साइन करता है, या सक्रिय कुंजी से जब डिवाइस पर उस खाते की पोस्टिंग कुंजी न हो।

ऐप खाते के साथ

  1. अपना ऐप पंजीकृत करें: उसका Hive खाता बनाएँ और अपने कॉलबैक सूचीबद्ध करें। आपको क्लाइंट सीक्रेट और @hivesigner की अनुमति नहीं चाहिए।

  2. उपयोगकर्ता को यहाँ भेजें:

    https://hivesigner.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=login&state=STATE
    
  3. उपयोगकर्ता स्कोप «आपके खाते का उपयोगकर्ता नाम देखना» के साथ «APP में लॉगिन करें» देखता है। वह लॉगिन करें चुनता है।

  4. Hivesigner आपके कॉलबैक पर भेज देता है:

    REDIRECT_URI?state=STATE&access_token=TOKEN&expires_in=604800&username=USERNAME
    
  5. state मिलाएँ, फिर टोकन जाँचें। यह एक login टोकन है जिसमें आपके ऐप का नाम है, इसलिए इनमें से कोई भी तरीका चलेगा:

    • इसके साथ GET /api/me बुलाएँ, जो user में खाता और scope में ["login"] लौटाता है, फिर टोकन डिकोड करके type और app जाँचें (API से पूछें);
    • या type: 'login' और अपने ऐप के नाम के साथ खुद जाँचें

login टोकन कुछ प्रसारित नहीं कर सकता: /api/broadcast उससे भेजा हर ऑपरेशन अस्वीकार कर देता है।

ऐप खाते के बिना

  1. उपयोगकर्ता को redirect_uri के साथ और client_id के बिना अनुमति URL पर भेजें:

    https://hivesigner.com/oauth2/authorize?redirect_uri=REDIRECT_URI&state=STATE
    

    कॉलबैक https:// होना चाहिए, या लूपबैक पर http:// (localhost, 127.0.0.1, [::1])। इसे पंजीकृत करने के लिए कोई सूची नहीं है। Hivesigner यहाँ scope और response_type को अनदेखा करता है: उत्तर हमेशा एक लॉगिन टोकन होता है।

  2. उपयोगकर्ता «HOST आपके Hive उपयोगकर्ता नाम की पुष्टि करना चाहता है।» देखता है, जहाँ HOST आपके कॉलबैक का होस्ट है। वह लॉगिन करें चुनता है।

  3. Hivesigner आपके कॉलबैक पर भेज देता है:

    REDIRECT_URI?state=STATE&access_token=TOKEN&expires_in=604800&username=USERNAME
    
  4. state मिलाएँ, फिर टोकन खुद जाँचें। API ऐसा टोकन नहीं लेता जिसमें किसी ऐप का नाम न हो, इसलिए आपका सर्वर हस्ताक्षर को खाते की कुंजियों के सामने जाँचता है। देखें खुद जाँचें, type: 'login' के साथ और app के बिना।

जब कॉलबैक कोई वेब पता न हो, या लूपबैक के बाहर सादा http:// हो, तो Hivesigner अनुरोध अस्वीकार कर देता है और उपयोगकर्ता को कारण बताता है।

कौन-सा इस्तेमाल करें

ऐप खाते के साथ ऐप खाते के बिना
उपयोगकर्ता क्या देखता है आपके ऐप का नाम, चित्र और Hive खाता सिर्फ़ आपकी साइट का होस्ट
तैयारी कॉलबैक सूचीबद्ध किया हुआ एक Hive खाता कुछ नहीं
टोकन में नाम होता है आपके ऐप का किसी ऐप का नहीं
टोकन जाँचें /api/me या अपने कोड से अपने कोड से
आगे चलकर पोस्टिंग पहुँच उसी खाते से: posting माँगें और @hivesigner को अनुमति दें पहले एक ऐप खाता चाहिए

जब हो सके, ऐप खाता इस्तेमाल करें। उपयोगकर्ता आपके ऐप का नाम और चित्र देखते हैं। आपका सर्वर दूसरे ऐप के लिए बने टोकन अस्वीकार कर सकता है। आगे चलकर उसी खाते से पोस्टिंग पहुँच पर जा सकते हैं।

दूसरा तरीका तब इस्तेमाल करें जब आपकी साइट का Hive खाता न हो और वह चाहती भी न हो।

लॉगिन सुरक्षित ढंग से जाँचें

  • अनुरोध को state से बाँधें। हर लॉगिन के लिए एक यादृच्छिक मान बनाएँ, उसे उपयोगकर्ता के सत्र में रखें, कॉलबैक पर मिलाएँ और एक ही बार इस्तेमाल करें। देखें अनुरोध को state से बचाएँ
  • प्रकार जाँचें। सिर्फ़ signed_message.type बराबर login स्वीकार करें। कोड या रिफ़्रेश टोकन लॉगिन नहीं है।
  • ऐप जाँचें। ऐप खाते के साथ signed_message.app आपका ऐप होना चाहिए। उसके बिना कोई app नहीं होना चाहिए।
  • उम्र जाँचें। आप टोकन को रीडायरेक्ट के ठीक बाद जाँचते हैं, इसलिए उसे उसके timestamp के कुछ ही मिनटों के भीतर स्वीकार करें (जैसे 5 मिनट, एक मिनट के घड़ी अंतर के साथ)।
  • हर टोकन एक बार इस्तेमाल करें। सफल जाँच के बाद अपना सत्र शुरू करें (जैसे एक httpOnly कुकी) और Hivesigner का टोकन छोड़ दें। स्वीकार किए टोकनों का रिकॉर्ड तब तक रखें जब तक वे उम्र की जाँच पास करने लायक न रह जाएँ। जो टोकन दोबारा दिखे उसे अस्वीकार करें।
  • टोकन को लॉग से बाहर रखें। वह आपके कॉलबैक की क्वेरी स्ट्रिंग में आता है। देखें टोकन सुरक्षित रखें

उदाहरण

https://hivesearcher.com और https://openhive.chat जैसी साइटें लोगों को उनके Hive खाते से लॉगिन करने देती हैं, ऐसी सुविधाओं के लिए जो चेन से बाहर ही रहती हैं, जैसे खोज और चैट। उन्हें सिर्फ़ यह जानना होता है कि व्यक्ति कौन है, और कुछ नहीं।