ठीक है, मैं अत्यधिक सुझाव है कि नहीं (एसएसएल के तहत जब भी) किसी भी परिस्थिति में सादा पाठ भर में नाम/पासवर्ड भेज दिया। इसके बजाय, मैं प्रमाणीकरण के एक डाइजेस्ट रूप का उपयोग करने का सुझाव देना चाहता हूं।
इसके बजाय, मैं एक बड़ा प्रमाणीकरण टोकन उत्पन्न करने का सुझाव दूंगा (बड़े आकार की एक यादृच्छिक स्ट्रिंग, 128 वर्ण काम करेंगे)। फिर, उपयोगकर्ता अपने ऐप में "टोकन" इंस्टॉल करेंगे।
अब, जब ऐप अपडेट के लिए जांच करता है, तो यह पहले आपके सर्वर को एक डाइजेस्ट टोकन मांगने का अनुरोध करता है। यह एक यादृच्छिक, एक बार उपयोग टोकन है जिसका उपयोग केवल एक अनुरोध के लिए किया जाता है। आपके एप्लिकेशन को टोकन जेनरेट करना चाहिए, इसे टिकास्टैम्प के साथ एक टिकाऊ प्रारूप (फ़ाइल, मेमोरी, डेटाबेस इत्यादि) में स्टोर करें, और उसके बाद इसे वापस भेजें।
अब, आपके एप्लिकेशन को यह पाचन टोकन प्राप्त होता है (जिसे $dt
कहा जाता है)। फिर, आप इसे पहले से कॉन्फ़िगर किए गए पूर्व-कॉन्फ़िगर किए गए प्रमाणीकरण टोकन के साथ hmac करते हैं।
$authBit = $username . ':' . $authToken;
$hash = hash_hmac('sha256', $authBit, $digestToken);
$authField = $username . ':' . $hash . ':' . $digestToken;
फिर, आप सर्वर पर $authField
भेजते हैं।सर्वर तो भागों बंट जाएगा:
list ($user, $hash, $digestToken) = explode(':', $authField);
अब, आप पहली बार डेटाबेस में उपयोगकर्ता के प्रमाणीकरण टोकन देखने और $authToken
में संग्रहीत। फिर, आप यह सुनिश्चित करने के लिए $digestToken
देख रहे हैं कि यह मौजूद है और यह 60 सेकंड से भी कम समय पहले बनाया गया था (यदि यह बहुत छोटा है, तो आप इसे समायोजित कर सकते हैं, लेकिन इसे काफी लंबा नहीं बनाते हैं)। किसी भी तरह से, इस बिंदु पर डीबी से इसे हटाएं (इसे पुन: उपयोग करने से रोकने के लिए)।
अब, $digestToken
मौजूद है और वैध है, और यदि आप एक $authToken
मिल सकता है, तो बस निम्नलिखित जांच:
$stub = $user . ':' . $authToken;
if ($hash == hash_hmac('sha256', $stub, $digestToken)) {
//valid user
} else {
//Not valid
}
यह भेजा टोकन प्रत्येक और कभी भी http अनुरोध को बदलने को लाभ मिलता है (अनुरोध स्ट्रीम पढ़ने वाला कोई भी व्यक्ति उस उपयोगकर्ता नाम के अलावा किसी भी संवेदनशील जानकारी को प्राप्त करने में सक्षम नहीं होगा, जिसे आप चाहें तो आगे मास्क कर सकते हैं) ...
आप हैश/नमक में देख सकते हैं। यानी, ग्राहक एक हैश किए गए पासवर्ड का उपयोग करने का अनुरोध करते हैं जो कि नमक का उपयोग करके फिर से धोया जाता है केवल आपका सर्वर जानता है। –
यह प्रश्न का प्रकार है जो http://area51.stackexchange.com/proposals/12123/webservice-apis – Cyclone