2011-12-06 15 views
8

मुझे क्या करना कोशिश कर रहा हूँ:अक्षम लॉग इन संकेतों में mod_auth_sspi_1.0.4-2.2.2

  • स्वचालित रूप से लॉग-इन व्यक्ति को देखने के Windows उपयोगकर्ता नाम पकड़ लेता है कि हमारी कंपनी के इंट्रानेट पर किसी मुख पृष्ठ बनाएँ पृष्ठ बिना व्यक्ति को लोड होने पर इन प्रमाण-पत्रों में प्रवेश करने के लिए कहा जा रहा है।

  • वर्तमान में, मैं बस स्थानीय उपयोगकर्ता नाम पकड़ना चाहता हूं, क्योंकि यह हमारे आईटी लोगों को डोमेन सेटअप प्राप्त करने से कुछ समय पहले होगा। उदाहरण के लिए, अभी मैं चाहता हूं कि यह किसी भी संकेत के बिना "(पीसी-नाम) \ windows.user.name" को कैप्चर करे।

पर्यावरण:

  • अपाचे 2.2.21 विंडोज 7 x64 पर (एक बार यह उत्पादन में है CentOS पर हो जाएगा)।

  • PHP 5.3.8 (वीसी 9-जेडटीएस)।

  • इंटरनेट एक्सप्लोरर 9.0.8x और फ़ायरफ़ॉक्स 6.0.2 (बाद में क्रोम के बारे में चिंता करेगा)।

  • वर्तमान परीक्षण पृष्ठ केवल एक PHP स्क्रिप्ट है print_r ($ _SERVER) कॉलिंग।

  • चीजों को सरल रखने के लिए, जिस निर्देशिका में मैं इसका परीक्षण कर रहा हूं वह वर्चुअलहोस्ट नहीं है।

कदम मैं अब तक निकाल दिया है: अपाचे को SourceForge से

  • डाउनलोड किया mod_sspi_1.0.4-2.2.2 और निकाले mod_auth_sspi.so निर्देशिका मॉड्यूल।

  • जोड़ा मॉड्यूल घोषणा:

    LoadModule sspi_auth_module मॉड्यूल/mod_auth_sspi.so

  • जोड़ा निर्देशिका परिभाषा:

    AllowOverride कोई नहीं विकल्प कोई नहीं आदेश की अनुमति देते हैं, से इनकार सब से अनुमति दें

    AuthName "My Intranet" 
    AuthType SSPI 
    SSPIAuth On 
    SSPIAuthoritative Off 
    
    require valid-user 
    
    config और PHP स्क्रिप्ट के पूर्ण URL पथ को network.automatic-ntlm-auth.trusted-यूआरआई की स्थापना तो फ़ायरफ़ॉक्स को पुनः आरंभ:

  • के बारे में पर जाकर फ़ायरफ़ॉक्स में एकीकृत प्रमाणीकरण सक्षम किया गया।

  • मैंने अभी तक आईई में समकक्ष कदम नहीं किया है, लेकिन एक बार जब मैं फ़ायरफ़ॉक्स को आंतरिक रूप से काम करता हूं तो यह आंतरिक रूप से हमारे प्राथमिक समर्थित ब्राउज़र के रूप में काम करेगा।

  • अपाचे को पुनरारंभ किया और परीक्षण PHP स्क्रिप्ट लोड करने का प्रयास किया।

परिणाम:

  • दोनों IE और Firefox में, मैं एक उपयोगकर्ता नाम और पासवर्ड से पहले पृष्ठ लोड होने का संकेत मिलेगा। मुझे वह संकेत नहीं चाहिए। मैं चाहता हूं कि उपयोगकर्ता नाम तुरंत बिना किसी संकेत के पता लगाया जाए।

समस्या निवारण अब तक:

  • मैं ऐसे authritative/बंद और whatnot के रूप में विभिन्न SSPI विकल्प, को दोहराते रहते कोशिश की है। कोई प्रभाव नहीं।

  • अगर मैं "वैध उपयोगकर्ता की आवश्यकता" को हटा देता हूं, तो संकेत अब प्रकट नहीं होता है, लेकिन फिर उपयोगकर्ता नाम पारित नहीं होता है, या तो (यह शून्य नहीं है, केवल सरणी अवधि में सेट नहीं है)।

  • अगर मैं प्रॉम्प्ट पर "रद्द करें" दबाता हूं, तो मुझे मानक "प्रमाणीकरण आवश्यक" पृष्ठ मिलता है।

  • यदि मैं एक अवैध उपयोगकर्ता नाम, या सही उपयोगकर्ता नाम दर्ज करता हूं लेकिन गलत पासवर्ड के साथ, पृष्ठ लोड होगा लेकिन उपयोगकर्ता नाम "(पीसी-नाम) \ अतिथि" होगा।

  • यदि मैं सही उपयोगकर्ता नाम/पासवर्ड दर्ज करता हूं, तो उपयोगकर्ता नाम के बजाय उपयोगकर्ता नाम प्रदर्शित होता है।

  • आईई या फ़ायरफ़ॉक्स में उपयोगकर्ता नाम/पासवर्ड दर्ज करने के बाद, ब्राउजर याद करता है कि बाद के पेज लोड पर उपयोगकर्ता नाम तब तक लोड होता है जब तक कि मैं संग्रहीत पासवर्ड कैश साफ़ नहीं करता या ब्राउज़र को पुनरारंभ नहीं करता।

  • मैंने पिछले 3 या इतने घंटों को गुगलिंग और यादृच्छिक अनुमान लगाया है। शून्य सफलता मुझे इस प्रश्न पूछने वाले लोगों की कुछ अलग-अलग फ़ोरम पोस्ट मिली हैं, लेकिन या तो वे अनुत्तरित या प्रस्तावित समाधानों की पेशकश कर चुके हैं जिन्हें मैंने पहले ही सफलता के बिना प्रयास किया है।

फिर, पेज के बिना किसी भी उत्साह, लोड करने के लिए, और $ _SERVER सरणी उत्पादन में वर्तमान में प्रवेश पर Windows उपयोगकर्ता नाम प्रदर्शित करने के लिए कि मैं क्या चाहता हूँ।

जहां तक ​​मैं समझ सकता हूं, यह या तो है: एक विंडोज कॉन्फ़िगरेशन समस्या, अपाचे कॉन्फ़िगरेशन समस्या, या ब्राउज़र कॉन्फ़िगरेशन समस्या। इसके अलावा, मैं विचारों से ताजा हूं।

मैं आपकी सहायता के लिए बहुत आभारी हूं। धन्यवाद!

- क्रिस

+0

क्षमा करें उपरोक्त पूरी तरह से नहीं पढ़ा, आप एक विंडोज स्टेशन पर काम कर रहे हैं। – ehime

उत्तर

7

कुछ दिनों लगे, लेकिन अंत में मैंने इसे अपने आप से बाहर निकाला। जाहिर है, फ़ायरफ़ॉक्स का वर्णन करने वाले यहां मौजूद विभिन्न दस्तावेज़ और ट्यूटोरियल: कॉन्फ़िगरेशन सेटिंग गलत हैं। वे दावा करते हैं कि पूर्ण यूआरआई, प्रोटोकॉल उपसर्ग सहित, शामिल होना चाहिए। जैसा कि यह पता चला है, सटीक विपरीत सच है।

अंधेरे में एक यादृच्छिक शॉट के रूप में, मैंने इसे "लोकलहोस्ट" (डोमेन पर परीक्षण सर्वर चल रहा है) पर सेट करने का प्रयास किया। और voila! यह तय है! दूसरी तरफ, "http: // localhost" ने इसे तोड़ दिया।

एक बार जब मैं इसे फ़ायरफ़ॉक्स में काम कर रहा हूं, यह सत्यापित कर रहा है कि सर्वर-साइड कॉन्फ़िगरेशन सही था, इसे आईई और क्रोम पर लागू करना एक सिंच था। आईई के लिए, मैंने अभी "http: // localhost" जोड़ा है (इस मामले में, आप प्रोटोकॉल उपसर्ग चाहते हैं) "इंट्रानेट" क्षेत्र में। और चूंकि क्रोम उसी नेटवर्क सेटिंग्स का उपयोग करता है जो आईई उपयोग करता है, उस चरण को यह दोनों ब्राउज़रों के लिए काम कर रहा है।

जहां तक ​​सर्वर-साइड कॉन्फ़िगरेशन चला जाता है, ऐसा लगता है कि मेरे पास शुरुआत से ही सही था। मैं, यह थोड़ा आसान बनाने के लिए, हालांकि, तो वास्तव में आप सभी की निर्देशिका ब्लॉक में की जरूरत यह है में सक्षम था:, यदि आप एक print_r ($ _SERVER) कर एक PHP स्क्रिप्ट को इंगित

AuthName "Whatever you want to call your intranet" 
AuthType SSPI 
SSPIAuth On 

require valid-user 
इस स्थापना के साथ

, उत्पादन कुछ इस तरह शामिल होंगे:

[REMOTE_USER] => dev-kdc-pc01\kris.craig 
[AUTH_TYPE] => NTLM 
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig 

यदि आप चाहते हैं (यानी "देव-KDC-pc01 \") डोमेन भाग से छुटकारा पाने के लिए आपको या तो यह PHP में पार्स आउट कर या करने के लिए इस लाइन में जोड़ सकते हैं ऊपर वर्णित httpd.conf में निर्देशिका ब्लॉक में आपकी एसएसपीआई सामग्री:

SSPIOmitDomain On 

कृपया ध्यान दें कि मैंने केवल विंडोज सिस्टम पर इसका परीक्षण किया है जहां अपाचे वेबसर्वर स्थानीयहोस्ट पर चल रहा था। मैंने अभी तक ऐसी स्थिति में परीक्षण नहीं किया है जहां अपाचे सर्वर लिनक्स पर चल रहा है, हालांकि इसका परिणाम पर कोई प्रभाव नहीं होना चाहिए क्योंकि सर्वर बस ब्राउज़र को जो भी भेज रहा है उसे स्वीकार कर रहा है। यह भी आवश्यक है कि ग्राहक विंडोज या कुछ अन्य एसएसपीआई-संगत वातावरण चला रहे हों। मैंने अभी तक यह निर्धारित नहीं किया है कि यह मैक-उपयोग करने वाले कर्मचारियों के लिए यह काम कैसे करें।

यह भी ध्यान दें कि मैंने सफलतापूर्वक इस नेटवर्क पर परीक्षण किया है जो वर्तमान में एक डोमेन कॉन्फ़िगर किया गया है। अन्यत्र प्रकाशित लेखों के मुताबिक, व्यवहार एक वर्कस्टेशन पर समान होना चाहिए जो डोमेन का सदस्य है।

मुझे आशा है कि इससे मदद मिलती है! धन्यवाद!

+0

सब कुछ करने का प्रयास किया, आपका समाधान भी मेरी मदद नहीं करता है ... – Somnium

0

यह आंशिक उत्तर हो सकता है।

BOOL WINAPI GetUserName(
    __out LPTSTR lpBuffer, 
    __inout LPDWORD lpnSize 
); 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

ऐसा लगता है कि आप इस प्रणाली जानकारी प्राप्त कर सके की तरह इस का उपयोग करते हुए, दूसरे आधे जानकारी स्क्रैप करने का PERL या अजगर का उपयोग कर इसे स्वचालित हो सकता है, तो पीएचपी में पोस्ट करें।

विंडोज में SysInfo लाने पर रूपरेखा यहां दी गई है।

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

ईमानदारी से इस यदि आप लिनक्स का उपयोग कर रहे PECL/पीएएम के साथ क्या करने के लिए एक बहुत आसान बात है।

+0

हालांकि क्लाइंट-साइड चलाना नहीं होगा? सर्वर आखिरकार सेंटोस चला रहा होगा और मूल रूप से स्वीकार करेगा कि ब्राउजर जो भी क्रेडेंशियल होने का दावा करता है। –

संबंधित मुद्दे