it-swarm.asia

هل هناك تطبيق / برنامج نصي يمكنني نشره لتمكين المستخدمين من تغيير كلمات مرور LDAP الخاصة بهم؟

لقد قمت مؤخرًا بتمكين مصادقة تستند إلى LDAP على نطاقي. وقد سمح لنا ذلك باستخدام مجموعة واحدة من بيانات الاعتماد لإدارة المدونة والمنتدى والويكي.

لسوء الحظ ، جاء ذلك على حساب قدرة المستخدمين على تغيير كلمات المرور الخاصة بهم.

من الناحية المثالية ، سيكون بإمكان المستخدمين زيارة صفحة (على سبيل المثال mydomain.com/account) ، المصادقة ثم تغيير كلمة المرور الخاصة بهم.

هل يعرف أي شخص البرنامج النصي أو التطبيق الذي سيتيح لي القيام بذلك بسرعة وسهولة؟ أعتقد أنه لن يكون من الصعب الكتابة في PHP ، لكنني أفضل ألا يكون لدي أي متاعب.

1
Tom Wright

على Serverfault ، أشار تيم لي نحو برنامج نصي يسمى phpLdapPassword .

استغرق الأمر حوالي 5 دقائق لتكوين ويوفر أيضًا قدرات إعادة تعيين كلمة المرور.

المشكلة المحتملة الوحيدة هي أن المؤلف لم يعد يحافظ عليه.

0
Tom Wright

هذه الصفحة يبدو لإظهار كيفية القيام بذلك:

بمجرد البدء في استخدام LDAP للمصادقة ، قد ترغب في السماح للمستخدمين بتغيير كلمات المرور الخاصة بهم. نظرًا لأنهم قد لا يريدون/يكونوا قادرين على القيام بتسجيل الدخول إلى Shell ، وتغيير كلمة المرور الخاصة بهم باستخدام ldappasswd (1) ، سيكون هناك شيء آخر ، وأكثر سهولة للمستخدم سيكون لطيفًا.

لقد اخترت استخدام PHP ، الذي قمت بتجميعه بدعم LDAP. باستخدام Apache مع دعم طبقة المقابس الآمنة (SSL) ، لا يتعين على كلمات المرور الانتقال عبر الأسلاك في نص عادي.

الآن ، يجب أن يكون المستخدمون قادرين فقط على تغيير كلمات المرور الخاصة بهم ، وليس سوى كلمة المرور. تم الحصول على هذا مع هذا المقطع الصوتي في slapd.conf

access to attr=userPassword
by self write
by anonymous auth
by * none

الخطوة التالية إذن ، هي مصادقة المستخدم ، عن طريق إجراء ربط ldap بأوراق اعتماده:

<?php    
    if(isset($username) and isset($newpass) and isset($oldpass)) {
        $ldapconn = ldap_connect("ldap.example.com", 389);
        $ldapbind = @ldap_bind($ldapconn,"uid=".$username.",dc=example,dc=com",$oldpass);
        if($ldapbind) {

            // If the bind with the old password succeeds, the user has entered the right username/password combination. To change the passwd we then do:

            print "<p>Change password ";
            if(ldap_mod_replace ($ldapconn, "uid=".$username.",dc=example,dc=com", 
                array('userpassword' => "{MD5}".base64_encode(pack("H*",md5($newpass))) { 
                print "succeded"; 
            } 
            else { 
                print "failed"; 
            }
            print ".</p>\n";
        }
?>
1
John Conde

نظرًا لأن الموقع الأصلي لـ phpLdapPasswd معطّل وتوقف Karyl عن التطوير ، أضفت مشروعًا منفصلاً منفصلًا: https://github.com/koppor/phpLdapPasswd

1
koppor