मुख्य कंटेंट पर जाएं
Didit ने पहचान और धोखाधड़ी के लिए इंफ्रास्ट्रक्चर बनाने हेतु $7.5M जुटाए
Didit
ब्लॉग पर वापस जाएँ
ब्लॉग · 6 मार्च 2026

डिडिट इवेंट्स के लिए रूबी ऑन रेल्स में आइडेंटपोटेंट वेबहुक कंज्यूमर बनाना (HI)

डिडिट जैसे पहचान सत्यापन प्लेटफॉर्म से वास्तविक समय की घटनाओं के लिए, मजबूत वेबहुक कंज्यूमर बनाना विश्वसनीय डेटा प्रोसेसिंग के लिए महत्वपूर्ण है। यह सुनिश्चित करता है कि डेटा सटीक और सुसंगत रहे, डुप्लिकेट को रोकता है और सिस्टम.

द्वारा Diditअपडेट किया गया
idempotent-webhook-consumers-ruby-rails-didit-events.png

डेटा अखंडता सुनिश्चित करनाआइडेंटपोटेंसी वेबहुक घटनाओं को विश्वसनीय रूप से संसाधित करने, डुप्लिकेट कार्यों को रोकने और आपके एप्लिकेशन में एक सुसंगत स्थिति बनाए रखने के लिए महत्वपूर्ण है।

वेबहुक हस्ताक्षरों का लाभ उठानाआने वाले अनुरोधों की प्रामाणिकता और अखंडता की पुष्टि करने, छेड़छाड़ और स्पूफिंग से बचाने के लिए हमेशा वेबहुक हस्ताक्षरों को सत्यापित करें।

अद्वितीय इवेंट आईडी का उपयोग करनाडुप्लिकेट डिलीवरी का प्रभावी ढंग से पता लगाने और उन्हें खारिज करने के लिए वेबहुक पेलोड में प्रदान की गई अद्वितीय इवेंट आईडी को स्टोर और जांचें।

डिडिट की मजबूत वेबहुक प्रणालीडिडिट एचएमएसी हस्ताक्षर और अद्वितीय इवेंट आईडी के साथ सुरक्षित, संस्करणित वेबहुक प्रदान करता है, जो आइडेंटपोटेंट कंज्यूमर के कार्यान्वयन को सरल बनाता है और महत्वपूर्ण पहचान सत्यापन वर्कफ़्लो के लिए विश्वसनीय इवेंट डिलीवरी सुनिश्चित करता है।

वेबहुक आइडेंटपोटेंसी की चुनौती

वेबहुक सेवाओं के बीच वास्तविक समय संचार के लिए एक शक्तिशाली तंत्र हैं, जो आपके एप्लिकेशन को किसी अन्य सिस्टम में होने वाली घटनाओं पर तुरंत प्रतिक्रिया करने में सक्षम बनाते हैं। हालांकि, वेबहुक की वितरित प्रकृति का मतलब है कि इवेंट कभी-कभी कई बार वितरित हो सकते हैं। नेटवर्क गड़बड़ियाँ, टाइमआउट या रिट्राई सभी डुप्लिकेट वेबहुक पेलोड का कारण बन सकते हैं। उचित प्रबंधन के बिना, ये डुप्लिकेट आपके एप्लिकेशन में महत्वपूर्ण समस्याएं पैदा कर सकते हैं, जैसे डुप्लिकेट रिकॉर्ड बनाना, अनावश्यक कार्यों को ट्रिगर करना या डेटा को दूषित करना।

यहीं पर आइडेंटपोटेंसी महत्वपूर्ण हो जाती है। एक आइडेंटपोटेंट ऑपरेशन वह होता है जो एक ही परिणाम देता है चाहे उसे एक बार निष्पादित किया जाए या कई बार। वेबहुक कंज्यूमर के लिए, इसका मतलब है कि आपके सिस्टम को किसी दिए गए इवेंट को केवल एक बार संसाधित करने के लिए डिज़ाइन करना, भले ही वेबहुक पेलोड कई बार प्राप्त हो। जब डिडिट जैसे प्लेटफॉर्म से पहचान सत्यापन परिणामों जैसे संवेदनशील डेटा से निपटना हो, तो आइडेंटपोटेंसी सुनिश्चित करना केवल एक अच्छी प्रथा नहीं है - यह डेटा अखंडता और सिस्टम विश्वसनीयता बनाए रखने के लिए आवश्यक है।

सुरक्षा और प्रामाणिकता के लिए वेबहुक हस्ताक्षरों का सत्यापन

किसी भी वेबहुक पेलोड को संसाधित करने से पहले, पहला और सबसे महत्वपूर्ण कदम इसकी प्रामाणिकता को सत्यापित करना है। यह सुनिश्चित करता है कि वेबहुक वास्तव में अपेक्षित प्रेषक (उदाहरण के लिए, डिडिट) से उत्पन्न हुआ है और इसकी सामग्री के साथ पारगमन में छेड़छाड़ नहीं की गई है। डिडिट के वेबहुक, उदाहरण के लिए, अनुरोध हेडर में एक एचएमएसी हस्ताक्षर शामिल करते हैं, जो एक साझा गुप्त कुंजी का उपयोग करके उत्पन्न होता है।

अपने रूबी ऑन रेल्स एप्लिकेशन में, आपको अपने डिडिट खाते से साझा गुप्त कुंजी को पुनः प्राप्त करना होगा (जिसे आप बिजनेस कंसोल के माध्यम से या एपीआई का उपयोग करके प्रोग्रामेटिक रूप से एक्सेस कर सकते हैं)। जब एक वेबहुक आता है, तो आप अनुरोध निकाय और अपनी गुप्त कुंजी का उपयोग करके अपना स्वयं का एचएमएसी हस्ताक्षर कंप्यूट करेंगे। इस कंप्यूटेड हस्ताक्षर की तुलना वेबहुक हेडर में दिए गए हस्ताक्षर से की जाती है। यदि वे मेल नहीं खाते हैं, तो अनुरोध को तुरंत अस्वीकार कर दिया जाना चाहिए।


class DiditWebhooksController < ApplicationController
  skip_before_action :verify_authenticity_token

  def create
    # Retrieve the shared secret key from your environment variables
    secret = ENV['DIDIT_WEBHOOK_SECRET']
    payload = request.body.read
    signature = request.headers['X-Didit-Signature'] # Or similar header name

    unless verify_signature(payload, signature, secret)
      head :unauthorized
      return
    end

    # Process the webhook payload after verification
    process_didit_event(JSON.parse(payload))
    head :ok
  end

  private

  def verify_signature(payload, signature, secret)
    digest = OpenSSL::Digest.new('sha256')
    hmac = OpenSSL::HMAC.hexdigest(digest, secret, payload)
    ActiveSupport::SecurityUtils.secure_compare("sha256=#{hmac}", signature)
  end

  def process_didit_event(event_data)
    # ... implementation for processing ...
  end
end

डिडिट इसे अपनी वेबहुक कॉन्फ़िगरेशन के हिस्से के रूप में एक secret_shared_key प्रदान करके सरल बनाता है, जिसे एपीआई के माध्यम से पुनः प्राप्त किया जा सकता है या आवश्यकतानुसार घुमाया जा सकता है। यह सुरक्षित तंत्र किसी भी पहचान सत्यापन वर्कफ़्लो के लिए मौलिक है, जहां आईडी सत्यापन या लाइवनैस जांच जैसे परिणामों की अखंडता सर्वोपरि है।

अद्वितीय इवेंट पहचानकर्ताओं के साथ आइडेंटपोटेंसी लागू करना

एक बार जब आप वेबहुक की प्रामाणिकता को सत्यापित कर लेते हैं, तो अगला कदम आइडेंटपोटेंसी सुनिश्चित करना है। अधिकांश अच्छी तरह से डिज़ाइन किए गए वेबहुक सिस्टम, जिसमें डिडिट भी शामिल है, प्रत्येक इवेंट के लिए एक अद्वितीय पहचानकर्ता प्रदान करते हैं। यह आईडी डुप्लिकेट प्रोसेसिंग का पता लगाने और उसे रोकने के लिए महत्वपूर्ण है। डिडिट के वेबहुक के लिए (विशेष रूप से v3, जिसकी सिफारिश की जाती है), प्रत्येक इवेंट पेलोड में एक अद्वितीय आईडी शामिल होती है जिसका उपयोग आप इस उद्देश्य के लिए कर सकते हैं।

रणनीति इन इवेंट आईडी को अपने डेटाबेस में स्टोर करना और प्रोसेसिंग से पहले उनकी जांच करना है। एक सामान्य पैटर्न में एक EventLog या WebhookEvent मॉडल बनाना शामिल है:


# db/migrate/YYYYMMDDHHMMSS_create_webhook_events.rb
class CreateWebhookEvents < ActiveRecord::Migration[7.x]
  def change
    create_table :webhook_events do |t|
      t.string :event_id, null: false, index: { unique: true }
      t.string :event_type
      t.jsonb :payload
      t.string :status, default: 'pending'
      t.timestamps
    end
  end
end

जब एक वेबहुक आता है:

  1. पेलोड से अद्वितीय event_id निकालें।
  2. इस event_id के साथ एक नया WebhookEvent रिकॉर्ड बनाने का प्रयास करें।
  3. यदि अद्वितीय बाधा उल्लंघन के कारण निर्माण विफल हो जाता है (जिसका अर्थ है कि event_id पहले से मौजूद है), तो आप जानते हैं कि यह एक डुप्लिकेट है और इसे सुरक्षित रूप से अनदेखा कर सकते हैं या इसे उसी तरह लॉग कर सकते हैं।
  4. यदि निर्माण सफल होता है, तो इवेंट को संसाधित करना जारी रखें, उसकी स्थिति को तदनुसार चिह्नित करें।

class DiditWebhooksController < ApplicationController
  # ... (signature verification as above) ...

  def create
    # ... (signature verification) ...

    event_data = JSON.parse(payload)
    event_id = event_data['id'] # Assuming 'id' is the unique event identifier from Didit

    # Use a transaction to ensure atomicity
    ActiveRecord::Base.transaction do
      webhook_event = WebhookEvent.find_or_initialize_by(event_id: event_id)

      if webhook_event.persisted? # If it already exists, it's a duplicate
        Rails.logger.info "Duplicate webhook event received: #{event_id}"
        head :ok
        return
      end

      webhook_event.event_type = event_data['type']
      webhook_event.payload = event_data
      webhook_event.status = 'processing'
      webhook_event.save!

      # Process the event in a background job for long-running tasks
      DiditEventProcessorJob.perform_later(webhook_event.id)
      head :ok
    end
  rescue ActiveRecord::RecordNotUnique # Handle race conditions for event_id
    Rails.logger.warn "Race condition detected for webhook event: #{event_id}. Ignoring."
    head :ok
  rescue JSON::ParserError
    head :bad_request
  rescue => e
    Rails.logger.error "Error processing webhook: #{e.message}"
    head :internal_server_error
  end
end

यह दृष्टिकोण, वास्तविक प्रोसेसिंग के लिए बैकग्राउंड जॉब के साथ मिलकर, यह सुनिश्चित करता है कि आपका वेबहुक एंडपॉइंट जल्दी प्रतिक्रिया करता है, प्रेषक से रिट्राई को रोकता है, जबकि डुप्लिकेट को विश्वसनीय रूप से संभालता है।

रेस कंडीशंस और ट्रांसेक्शन को संभालना

एक अद्वितीय इंडेक्स के साथ भी, रेस कंडीशंस तब हो सकती हैं जब दो समान वेबहुक लगभग एक साथ आते हैं। दोनों पहले वाले के ट्रांसेक्शन को कमिट करने से पहले एक नया WebhookEvent रिकॉर्ड बनाने का प्रयास कर सकते हैं। इसे कम करने के लिए:

  • डेटाबेस ट्रांसेक्शन का उपयोग करें: find_or_initialize_by और बाद के प्रोसेसिंग लॉजिक को डेटाबेस ट्रांसेक्शन के भीतर लपेटें। यह सुनिश्चित करता है कि या तो पूरा ऑपरेशन सफल होता है या विफल होता है, डेटा की निरंतरता बनाए रखता है।
  • RecordNotUnique को संभालें: ActiveRecord::RecordNotUnique अपवादों को पकड़ने के लिए तैयार रहें। यदि यह अपवाद एक नया WebhookEvent सहेजने का प्रयास करते समय होता है, तो यह एक रेस कंडीशन को दर्शाता है जहां किसी अन्य प्रक्रिया ने पहले ही इवेंट को सम्मिलित कर दिया है, और आप इसे सुरक्षित रूप से डुप्लिकेट के रूप में मान सकते हैं।

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

डिडिट कैसे मदद करता है

डिडिट एक एआई-नेटिव, डेवलपर-फर्स्ट आइडेंटिटी प्लेटफॉर्म है जिसे विश्वसनीयता और सुरक्षा को ध्यान में रखकर डिज़ाइन किया गया है, जिससे मजबूत वेबहुक कंज्यूमर को लागू करना आसान हो जाता है। हमारी मॉड्यूलर वास्तुकला स्वच्छ एपीआई और सुरक्षित वेबहुक प्रदान करती है जो स्वाभाविक रूप से आइडेंटपोटेंट प्रोसेसिंग का समर्थन करने के लिए डिज़ाइन किए गए हैं।

  • सुरक्षित वेबहुक: डिडिट के वेबहुक प्रत्येक इवेंट की प्रामाणिकता और अखंडता सुनिश्चित करने के लिए मजबूत एचएमएसी हस्ताक्षर (एक secret_shared_key का उपयोग करके जिसे आप प्रबंधित और घुमा सकते हैं) प्रदान करते हैं। आइडेंटपोटेंसी में यह महत्वपूर्ण पहला कदम अंतर्निहित है। आप इष्टतम पेलोड संरचना के लिए webhook_version (v3 अनुशंसित) भी निर्दिष्ट कर सकते हैं।
  • अद्वितीय इवेंट पहचानकर्ता: प्रत्येक डिडिट वेबहुक इवेंट में एक अद्वितीय पहचानकर्ता शामिल होता है, जिससे ऊपर चर्चा किए गए डुप्लीकेशन लॉजिक को लागू करना सीधा हो जाता है।
  • विन्यास योग्य डेटा प्रतिधारण: डिडिट के साथ, आप नियंत्रित करते हैं कि सत्यापन डेटा कितने समय तक संग्रहीत किया जाता है। आप बिजनेस कंसोल के माध्यम से या एपीआई के माध्यम से सीधे 1 महीने से 10 साल तक, या असीमित के लिए शून्य तक डेटा प्रतिधारण नीतियों को सेट कर सकते हैं। यह आपको अपनी डेटा फुटप्रिंट का प्रबंधन करते हुए अनुपालन आवश्यकताओं (जैसे जीडीपीआर) को पूरा करने की अनुमति देता है। यह इस बात से भी जुड़ा है कि आपका वेबहुक कंज्यूमर इवेंट लॉग को कैसे स्टोर और प्रबंधित कर सकता है।
  • फ्री कोर केवाईसी और मॉड्यूलर डिज़ाइन: डिडिट फ्री कोर केवाईसी प्रदान करता है, जिससे आप बिना किसी अग्रिम लागत के अपने वेबहुक कंज्यूमर का निर्माण और परीक्षण शुरू कर सकते हैं। हमारी मॉड्यूलर डिज़ाइन का मतलब है कि आप विशिष्ट पहचान सत्यापन उत्पादों को आसानी से एकीकृत कर सकते हैं - जैसे दस्तावेज़ जांच के लिए आईडी सत्यापन, धोखाधड़ी की रोकथाम के लिए निष्क्रिय और सक्रिय लाइवनैस, या आयु सत्यापन के लिए आयु अनुमान - और वेबहुक के माध्यम से वास्तविक समय अपडेट प्राप्त कर सकते हैं।

डिडिट की मजबूत और सुरक्षित वेबहुक प्रणाली का लाभ उठाकर, डेवलपर्स अपने एप्लिकेशन के मुख्य लॉजिक पर अधिक ध्यान केंद्रित कर सकते हैं और आने वाली घटनाओं को सुरक्षित करने और डुप्लिकेट करने की जटिलताओं पर कम, जिससे अधिक लचीला और भरोसेमंद पहचान सत्यापन वर्कफ़्लो हो सके।

शुरू करने के लिए तैयार हैं?

डिडिट को एक्शन में देखने के लिए तैयार हैं? आज ही एक मुफ्त डेमो प्राप्त करें

डिडिट के मुफ्त टियर के साथ मुफ्त में पहचान सत्यापित करना शुरू करें।

पहचान और धोखाधड़ी के लिए इंफ्रास्ट्रक्चर।

KYC, KYB, ट्रांज़ैक्शन मॉनिटरिंग और वॉलेट स्क्रीनिंग के लिए एक API। 5 मिनट में इंटीग्रेट करें।

इस पेज को समराइज़ करने के लिए AI से पूछें
रूबी ऑन रेल्स में डिडिट के लिए आइडेंटपोटेंट वेबहुक.