संक्षेप में, नहीं। मोंगो ObjectIds
अनुमान लगाना आसान है। विशेष रूप से, उच्च भार के तहत, ये लगातार संख्याएं होती हैं, क्योंकि टाइमस्टैम्प, मशीन और प्रक्रिया आईडी नहीं बदलती है। आप the structure of Objectid को देखें, तो वे
a 4-byte timestamp,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.
इसलिए का बना रहे हैं, वे बहुत कम अनियमितता की है। मैं अक्सर डेटाबेस में लगातार आईडी देखता हूं, उदाहरण के लिए यदि कुछ नियंत्रक कार्रवाई डोमेन ऑब्जेक्ट लिखती है, और त्वरित उत्तराधिकार में लॉग प्रविष्टि होती है।
यदि टाइमस्टैम्प अनुमान लगाया जा सकता है और मशीन आईडी निर्धारित करने योग्य है (जो तब तक है जब तक आपके पास एक बड़ा क्लस्टर न हो), केवल पांच बाइट शेष हैं। कई जेनरेटेड आईडी को देखकर, मैं शायद 50 प्रक्रियाओं को कम करने के लिए इसे कम कर सकता हूं ताकि प्रभावी एन्ट्रॉपी 28 बिट रेंज में कहीं हो। अनुमान लगाना अभी भी मुश्किल है, लेकिन यह एक्सेस टोकन के लिए बहुत जोखिम भरा है।
इसके बजाय एक क्रिप्टोग्राफ़िक रूप से मजबूत छद्म यादृच्छिक संख्या जनरेटर का उपयोग करें और उस से टोकन बनाएं। उदाहरण के लिए, .NET में, RNGCryptoServiceProvider
मनमाने ढंग से यादृच्छिक डेटा बनाने की अनुमति देता है।
एक sidenote के रूप में, मैं दो कारणों के लिए, अपने OAuthTokens चारों ओर एक अतिरिक्त क्रिप्टोग्राफिक आवरण के लिए सुझाव देते हैं:
क) आप जल्दी से अवैध टोकन निर्धारित करने में सक्षम होना चाहता हूँ। एक वैध क्रिप्टोग्राफिक खोल में अभी भी एक अवैध टोकन (एक निरस्त या समाप्त अनुदान) शामिल हो सकता है, लेकिन आपको हर बार ब्रूट फोर्स हमलों पर डेटाबेस को हिट करने की आवश्यकता नहीं है। इसके अलावा, ग्राहक
बी) ग्राहक टोकन का अनुरोध कर सकते हैं। हालांकि यह एक आवश्यकता नहीं है, मुझे पता है कि लगभग सभी प्रणालियों हर बार विभिन्न टोकन लौटते हैं (इससे कोई फर्क नहीं पड़ता कि वे स्वयं प्रमाणित हैं या नहीं)। आमतौर पर, ऐसा इसलिए होता है क्योंकि टोकन की सीमित वैधता अवधि होती है। यह वही वैधता अवधि नहीं है जिसे ओथ अनुदान है।
डेटाबेस में, जो आप वास्तव में स्टोर करना चाहते हैं वह अनुदान है, यानी कुछ उपयोगकर्ता द्वारा कुछ क्लाइंट को दी गई अनुमति। यदि यह अनुदान हटा दिया गया है, तो सभी टोकन अमान्य हो जाते हैं। हर बार एक नया टोकन डालने से बहुत ही असहज होता है क्योंकि उपयोगकर्ता को आवेदन अनुदान को प्रभावी ढंग से हटाने के लिए उन सभी को हटाना होगा।
अच्छा जवाब, धन्यवाद। मैंने अब तक पहुंच टोकन उत्पन्न करने के लिए एक क्रिप्टो रैपर बनाया है, और इसका मतलब है कि मेरे पास प्रति क्वेरी 1 कम डेटाबेस हिट है, जो अच्छा है;) –