इसलिए मैंने अपने आरईएसटी एपीआई के लिए पाचन HTTP प्रमाणीकरण का उपयोग करने का फैसला किया। मैंने इसे गुगल किया और पीएचपी मैनुअल में एक प्रविष्टि पाया कि इसका तरीका कैसे किया जाए। तो मैं स्क्रिप्ट की प्रतिलिपि बनाता हूं, इसे अपने सर्वर पर index.php में डालता हूं, ब्राउज़र में पेज खोलता हूं, मेरे क्रेडेंशियल दर्ज करने के बाद ब्राउज़र फिर से पूछता है और मैं क्रेडेंशियल दर्ज करने के अनंत लूप में फंस गया हूं। लिपि नीचे शामिल है और here पाया जा सकता है।PHP डाइजेस्ट HTTP प्रमाणीकरण उदाहरण काम नहीं कर रहा है, क्यों?
उदाहरण # 7 डाइजेस्ट HTTP प्रमाणीकरण उदाहरण
<?php
$realm = 'Restricted area';
//user => password
$users = array('admin' => 'mypass', 'guest' => 'guest');
if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
die('Text to send if user hits Cancel button');
}
// analyze the PHP_AUTH_DIGEST variable
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
!isset($users[$data['username']]))
die('Wrong Credentials!');
// generate the valid response
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);
if ($data['response'] != $valid_response)
die('Wrong Credentials!');
// ok, valid username & password
echo 'Your are logged in as: ' . $data['username'];
// function to parse the http auth header
function http_digest_parse($txt)
{
// protect against missing data
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));
preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}
return $needed_parts ? false : $data;
}
?>
मैं भी बुनियादी प्रमाणीकरण की कोशिश की और कहा कि पूरी तरह से काम किया।
उदाहरण # 6 बुनियादी HTTP प्रमाणीकरण उदाहरण
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
ऐसा लगता है $_SERVER['PHP_AUTH_DIGEST']
हमेशा खाली है की तरह।
क्या स्क्रिप्ट के साथ कुछ गड़बड़ है या मेरा पर्यावरण फंकी है और यदि ऐसा है तो मैं इसे कैसे ठीक करूं?
संपादित करें: स्क्रिप्ट के साथ कुछ भी गलत नहीं है। गलती सर्वर के साथ निहित है। अगर कोई जानता है कि संभवतः इसका कारण क्या हो सकता है, तो कृपया मुझे बताएं।
यदि इसकी कोई मदद है, तो मैंने उपरोक्त से अपना सटीक कोड लिया है और इसे अपने सर्वर पर एक परीक्षण पृष्ठ में रखा है और यह पूरी तरह से काम करता है (डाइजेस्ट ऑथ भाग), इसलिए यह किसी प्रकार का कॉन्फ़िगरेशन समस्या होना चाहिए। http://www.moditekka.com/phpauth.php – Infotekka
इसके अलावा, क्या आप प्रयासों के बीच ब्राउज़र को पूरी तरह से बंद कर रहे हैं (सभी टैब, सभी विंडोज़)? यह आपके पहले प्रयास को कुकी में संग्रहीत करेगा और जब तक आप ऐसा नहीं करेंगे तब तक आपको फिर से संकेत नहीं देंगे। – Infotekka
धन्यवाद, इन्फोटेक्का! अब मुझे यह पता लगाने की जरूरत है कि सर्वर के साथ क्या गलत है। –