2009-05-28 10 views
7

का उपयोग कर रहा लागू करने के लिए परिदृश्य पर एक सरल एकल साइन जिसमें शामिल होने सर्वर के कुछ खिड़कियों (आईआईएस) बक्से हो जाएगा का प्रयास कर रहा हूँ। ऐसा लगता है कि एसपीएनईजीओ इसके लिए एक उचित मार्ग है।SPNEGO SSO के लिए (Kerberos टोकन पीढ़ी/सत्यापन) अजगर

अपने उपयोगकर्ता नाम और पासवर्ड का उपयोग करते हुए अपना SSO सेवा करने के लिए
  • उपयोगकर्ता लॉग:

    यहाँ परिदृश्य है। मैं कुछ तंत्र का उपयोग करके उसे प्रमाणित करता हूं।

  • कुछ बाद में तो उपयोगकर्ता ऐप्स ए
    • अनुप्रयोग एक के लिए उपयोगकर्ता के अनुरोध SSO सेवा के द्वारा रोका जाता है में पहुंचना चाहता है पर
    • । SSO सेवा SPNEGO का उपयोग करता है अनुप्रयोग एक करने के लिए उपयोगकर्ता लॉग इन करने की:
      • SSO सेवा अनुप्रयोग एक वेब पेज मारता है, एक हो जाता है "WWW-प्रमाणित: निगोशिएट" प्रतिक्रिया
      • SSO सेवा एक "प्राधिकरण उत्पन्न करता है: बातचीत उपयोगकर्ता की ओर से xxx "प्रतिक्रिया, अनुप्रयोग ए उपयोगकर्ता अब ऐप ए में लॉग इन किया है का जवाब
    • अनुप्रयोग एक के लिए SSO सेवा अवरोध बाद उपयोगकर्ता अनुरोधों, उन्हें में प्राधिकरण हैडर डालने पार करने से पहले उन्हें एप्लिकेशन ए पर

क्या यह सही लगता है?

मैं दो चीजों की आवश्यकता (कम से कम है कि अब मैं के बारे में सोच सकते हैं पर):

  • "प्राधिकरण: निगोशिएट xxx" उत्पन्न करने की क्षमता उपयोगकर्ता की ओर से टोकन, अधिमानतः पायथन
  • का उपयोग कर
  • (परियोजना के बाद के भाग के लिए) पायथन में हेडर

उत्तर

8

यह वास्तव में क्या एप्पल ने अपने Calendar Server के साथ करता है: मान्य करने के लिए "निगोशिएट xxx प्राधिकरण" की क्षमता। SPNEGO को लागू करने के लिए, उनके पास प्रक्रिया के केर्बेरोज भाग के लिए python gssapi लाइब्रेरी है। CalendarServer/twistedcaldav/सर्वर प्रमाणन हिस्से के लिए authkerb.py में

देखो। केर्बेरोज मॉड्यूल (जो एक सी मॉड्यूल है) में कोई उपयोगी दस्तावेज़ नहीं है, लेकिन PyKerberos/pysrc/kerberos.py में सभी फ़ंक्शन परिभाषाएं हैं।

यहाँ SVN चड्डी के लिए यूआरएल है:
http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk
http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk

0

मैं कुछ समान (लिनक्स पर) के लिए काफी समय खोज रहा हूं, जिसने मुझे इस पृष्ठ पर कई बार नेतृत्व किया है, फिर भी कोई जवाब नहीं दे रहा है। तो यहां मेरा समाधान है, मैं इसके साथ आया:

वेब-सर्वर mod_auth_kerb के साथ एक अपाचे है। यह पहले से ही सक्रिय निर्देशिका में चल रहा है, काफी समय से एकल साइन-ऑन सेटअप। क्या मैं पहले से ही ऐसा करने में सक्षम होने से पहले:

  • एकल साइन के साथ क्रोमियम (, काम kinit उपयोगकर्ता @ डोमेन के साथ एक उचित krb5 सेटअप के साथ) अजगर कनेक्ट होने और SSPI का उपयोग कर में एकल प्रवेश पर का उपयोग लिनक्स पर
  • जैसे sspi.ClientAuth("Negotiate", targetspn="http/%s" % host)

pywin32 पैकेज, कुछ के साथ से निम्नलिखित कोड का टुकड़ा पहेली (और मेरी जरूरतों) पूरा करता है, करबरोस लिनक्स पर साथ पर पायथन एकल साइन होने (का उपयोग कर अजगर-जीएसएसएपीआई):

in_token=base64.b64decode(neg_value) 
service_name = gssapi.Name("[email protected]%s" % host, gssapi.C_NT_HOSTBASED_SERVICE) 
spnegoMechOid = gssapi.oids.OID.mech_from_string("1.3.6.1.5.5.2") 
ctx = gssapi.InitContext(service_name,mech_type=spnegoMechOid) 
out_token = ctx.step(in_token) 
buffer = sspi.AuthenticationBuffer() 
outStr = base64.b64encode(out_token) 
संबंधित मुद्दे