2012-11-09 16 views
5

मैं बैकएंड के रूप में फ्लास्क ढांचे के साथ एक वेबपैप विकसित कर रहा हूं और मुझे प्रमाणीकरण प्रदान करने की आवश्यकता है।फ्लास्क-लॉगिन और एलडीएपी

चूंकि यह हमारे स्थानीय डोमेन पर उपयोग करने के लिए एक इन-हाउस ऐप है, इसलिए मैंने अपने पहले से मौजूद डोमेन प्रमाण-पत्रों के साथ उपयोगकर्ता को प्रमाणीकृत करना चुना है।

मैं जिस विधि का उपयोग करता हूं वह win32security.LogonUserpywin32 से है जो सफल लॉगिन पर एक संभाल देता है।

मैंने समझने की कोशिश की है कि कैसे फ्लास्क-लॉगिन काम करता है, लेकिन @login_manager.user_loader कॉलबैक मुझे उलझन में डाल देता है।

यह कहता है कि मुझे एक आईडी प्रदान करनी चाहिए जिसका उपयोग उपयोगकर्ता को पुनः लोड करने के लिए किया जा सकता है, हालांकि मेरे पास इस मैपिंग को प्रदान करने के लिए कोई डेटाबेस या लगातार स्टोरेज नहीं है, क्योंकि मैं केवल यह जांचने में रूचि रखता हूं कि उपयोगकर्ता प्रमाणीकरण पास करता है या नहीं।

मेरे उपयोगकर्ता वर्ग इस तरह दिखता है:

class User(flask_login.UserMixin): 
    def __init__(self,username): 
     self.username = username 
     self.id = ??? 

एक id क्या उपयोग करने के लिए, और कैसे इस आईडी नक्शा वापस इस उदाहरण के लिए कर सकता है?

+0

का उपयोग यदि आपके पास LDAP वापस अंत का उपयोग कर रहे हैं, तो आप शायद आईडी के रूप में उपयोगकर्ता के डी एन का उपयोग करना चाहिए रहे हैं। –

उत्तर

4

फ्लास्क-लॉगिन निर्भर नहीं है या उपयोगकर्ताओं के लिए किसी विशिष्ट बैकएंड की आवश्यकता नहीं है। आपको उपयोगकर्ता ऑब्जेक्ट का प्रतिनिधित्व करना होगा और एक आईडी वापस करना होगा। उदाहरण

flask-login: can't understand how it works

10

के लिए इस पोस्ट आप LDAP मॉड्यूल के साथ अजगर में कर सकते हैं देखें:

LDAP_SERVER = "yourldapserver" 
LDAP_PORT = 390033 # your port 
import ldap 
def login(email, password): 
    ld = ldap.open(LDAP_SERVER, port=LDAP_PORT) 
    try: 
     ld.simple_bind_s(email, password) 
    except ldap.INVALID_CREDENTIALS: 
     return False 
    return True 
1

self.id एक स्ट्रिंग है अद्वितीय है होना चाहिए। यह में से एक हो सकते हैं:

  • cn (अद्वितीय LDAP में)
  • sAMAccountName (डोमेन अद्वितीय है, यह एक यूनिक्स लॉगिन की तरह है)
  • मेल (multivalued, उनमें से एक/हो सकता है चाहिए अद्वितीय)
  • ...

बस एक, और बुद्धिमानी से चुनें। मैं अपने काम के लिए sAMAcountName पसंद करते हैं। ldap_bind के बाद आपको एलडीएपी खोज करने की आवश्यकता है।

प्रमाणीकरण के बिना पहला बाध्य (डीएन खोजने के लिए) सूचना लीक से बचने के लिए एक आवेदक उपयोगकर्ता के साथ किया जाना चाहिए (यदि आपको हैक किया गया है)।

Ldap कनेक्शन संसाधनों => एक संदर्भ प्रबंधक

with ldap.open(LDAP_SERVER, port=LDAP_PORT) as ld: 
    # do the search/bind/search here 
संबंधित मुद्दे