سؤال

هل هناك طريقة لتسجيل مصادقة Digest التي تم إجراؤها في PHP.

لقد جربت unset ($ _ server ["php_auth_digest"]) ؛ لكنها لن تطلب إعادة الانقلاب. أعلم أنه إذا قمت بإغلاق المتصفح ، فسيعمل وها هي وظيفاتي.

    function login(){
        $realm = "Restricted area";
        $users = array("jamesm"=>"");
        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)."\"");
            return false;
        }
        if (!($data = http_digest_parse($_SERVER["PHP_AUTH_DIGEST"])) || !isset($users[$data["username"]]))
            return false;
        $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)
            return false;
        return true;
    }
    function logout(){
        unset($_SERVER["PHP_AUTH_DIGEST"]);
        return true;
    }

أكثر ما أحتاج إلى إضافته إلى وظيفة تسجيل الدخول لإنهاء هذا.

إذا قمت بتغيير المجال الذي يعمل ، لكنني لا أريد تغييره.

هل كانت مفيدة؟

المحلول

لن يكون لتوضيح $ _server ['php_auth_digest'] أي تأثير. المشكلة هي أنه لا توجد إجابة "جيدة" للمهمة التي حددتها.

لا تسمح مواصفات HTTP تقنيًا بذلك ، ولكن في الممارسة العملية ، فإن معظم المتصفحات هناك ستقوم "بتسجيل المستخدم" بشكل فعال إذا أرسلت لهم 401 أخرى.

ستقوم كل من Netscape Navigator و Internet Explorer بمسح ذاكرة التخزين المؤقت لمصادقة نافذة المتصفح المحلي للعالم عند تلقي استجابة خادم من 401. يمكن أن "يسجل" مستخدمًا بشكل فعال ، مما يجبرهم على إعادة إدخال اسم المستخدم وكلمة المرور. بعض الأشخاص يستخدمون هذا لتسجيل الدخول إلى "Time Out" ، أو توفير زر "تسجيل الخروج".

من الكود الخاص بك ، ربما تكون أبسط طريقة هي شيء مثل:

function logout(){
    header('HTTP/1.1 401 Unauthorized');
    return true;
}

ولكن ، مرة أخرى ، هذا ليس في الواقع شيء معتمد من مواصفات HTTP.

نصائح أخرى

إجابة موثوقة: http://tools.ietf.org/id/draft-ietf-httpbis-p7-auth-12.txt - القسم 6.1
لا توجد طريقة موثوقة.

تتضمن بعض الحلول مزيفًا 401 وتغيير المجال = ، أو الاعتراف بطلب Aud Auth مع بيانات اعتماد غير صالحة بشكل هادف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top