كيف يمكنني تنفيذ تسجيل الدخول الأحادي (SSO) باستخدام Microsoft إعلان داخلي PHP التطبيق ؟

StackOverflow https://stackoverflow.com/questions/1003751

سؤال

أنا على علم غامضة على الكمبيوتر منضما إلى مجال أي يمكن أن يطلب منك أن ترسل المزيد من رؤوس يمكنني استخدام التوقيع تلقائيا إلى التطبيق.لدي apache يعمل على windows server مع mod_php.أود أن تكون قادرة على تجنب يضطر المستخدم إلى تسجيل الدخول إذا لزم الأمر.لقد وجدت بعض الروابط التي تتحدث عن Kerberos وحدات أباتشي.

http://www.onlamp.com/pub/a/onlamp/2003/09/11/kerberos.html?page=last https://metacpan.org/pod/Apache2::AuthenNTLM

أنا منذ تشغيل على ويندوز ثبت لها أن تكون غير تافهة للحصول على Perl أو أباتشي وحدات مثبتة.ولكن لا PHP بالفعل الوصول إلى HTTP ؟

لقد وجدت هذا لكنه لا يفعل أي مصادقة يظهر فقط أن PHP يمكن قراءة NTLM رؤوس.http://siphon9.net/loune/2007/10/simple-lightweight-ntlm-in-php/

أود أن تكون قادرة على المستخدمين نشير فقط إلى تطبيق ويكون لهم تلقائيا مصادقة.وقد أي شخص لديه أي خبرة مع هذا أو حصلت على العمل ؟

التحديث لأن الأصل نشر هذا السؤال قمنا بتغيير الاجهزة إلى nginx و php-fcgi لا يزال قيد التشغيل على نظام التشغيل ويندوز.Apache2 و php-cgi على ويندوز هو على الارجح واحدة من أبطأ الاجهزة يمكن تكوين على ويندوز.يبدو أباتشي قد تكون لا تزال في حاجة (يعمل مع php-fcgi) ولكن أود أن تفضل nginx الحل.

أنا أيضا ما زلت لا أفهم (وأحب أن يكون تعليما) لماذا HTTP server الإضافات ضرورية و لا يمكن PHP, web server الملحد الحل.

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

المحلول

كل ما عليك هو mod_auth_sspi وحدة من طراز أباتشي.

عينة التكوين:

AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain mydomain

# Set this if you want to allow access with clients that do not support NTLM, or via proxy from outside. Don't forget to require SSL in this case!
SSPIOfferBasic On

# Set this if you have only one domain and don't want the MYDOMAIN\ prefix on each user name
SSPIOmitDomain On

# AD user names are case-insensitive, so use this for normalization if your application's user names are case-sensitive
SSPIUsernameCase Lower
AuthName "Some text to prompt for domain credentials"
Require valid-user

و لا تنسى أنه يمكنك أيضا استخدام فايرفوكس شفافة SSO في مجال Windows:ببساطة الذهاب إلى about:config, البحث عن network.automatic-ntlm-auth.trusted-uris, و لإدخال اسم المضيف أو FQDN الخاص بك الداخلية التطبيق (مثل myserver أو myserver.corp.domain.com).هل يمكن أن يكون أكثر من إدخال واحد, انها قائمة مفصولة بفواصل.

نصائح أخرى

سأكون غريبة عن الحل الذي يستخدم OpenID بمثابة الخلفية (من نوع ما) على هذا...لم أكن أرى أي شيء من شأنه أن هوك في ActiveDirectory مباشرة عندما بحثت في (بسرعة).ومع ذلك ، يمكن أن يكون مؤلم جدا لتنفيذ أكثر من عادي HTTP(S) (ستكون OpenID موفر فحص وثائق التفويض ضد الإعلانات المحلية).في أحسن الأحوال, كنت قد تكون قادرة على مجرد إضافة بضع فصول التطبيق الخاص بك سيتم إيقاف وتشغيل-أي ملقم ويب الوحدات المطلوبة.هناك الكثير من التعليمات البرمجية مفتوحة المصدر هناك على جانبي هذا ، حتى إذا كان أي شيء آخر ، فإنه يستحق أن نلقي نظرة.إذا كنت تتعرض الخلفية إلى المستخدمين (أيوقدم لهم OpenID عناوين), أن لديك فائدة إضافية من لهم القدرة على تسجيل الدخول إلى أكثر من مجرد الخاص بك الداخلية المواقع باستخدام بيانات الاعتماد هذه.(على سبيل المثال:تجاوز سعة المكدس.)

بوصفها جانبا ، سأكون ضد يجعلها بحيث Internet Explorer هو مطلوب.أنا لست متأكدا إذا كان هذا هو الهدف من الطريقة التي كتب السؤال, ولكن اعتمادا على بيئة أتوقع الناس الذين يستخدمون فايرفوكس أو سفاري (أو أوبرا أو ...) أقل حماسا.(أنت لست النامية ضد أي أول, أنت ؟ التي كانت مؤلمة كلما فعلت ذلك.) هذا لا يعني أنه لا يمكن استخدام هذه الميزة من أي فقط أنه لا ينبغي أن يكون الخيار الوحيد.الرابط الذي نشر وذكرت NTLM عملت مع أكثر من أي ولكن منذ أن كنت لم يكن لديك أي خبرة مع ذلك ، فإنه من الصعب الحكم على مدى هذا العمل.

كان لي مشكلة مماثلة الذي أنا في حاجة إلى حل المنظمة.

كنت أبحث في استخدام adLDAP.

هناك بعض الوثائق على الموقع لتحقيق سلس المصادقة مع "Active Directory" أيضا.

خيار واحد بالنسبة لك هو استخدام CAS (المركزية خدمة مصادقة).

وقد php مكتبة العميل.

كيفية ربط MS "Active Directory": http://www.ja-sig.org/wiki/display/CASUM/Active+Directory

سوف تتطلب أباتشي مخضرم 2 على الرغم من.

IIS/PHP FCGI ، تحتاج إلى إرسال غير المصرح به رأس:

function EnableAuthentication()
{
    $realm = "yoursite";
    header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
    header("HTTP/1.1 401 Unauthorized"); 
    exit;
}

ثم يمكنك الحصول على اسم المستخدم مع:

$winuser = $_SERVER["REMOTE_USER"];

ثم تأكد $winuser في قاعدة البيانات يسمح للمستخدمين.

تأكد من اختبار هذا غير مميزة الحساب.عند أولا تثبيت هذا اختبرته وانها عملت بشكل جيد, ولكن في وقت لاحق عندما معيار غير الخادم المستخدم المشرف حاول هذا فشل.تبين بعض الدلائل المؤقتة تحتاج إلى أذونات تغير ضيف المستخدمين.لا أذكر بالضبط الإعدادات.

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