Flask使用LDAP登录用户会话

时间:2017-01-06 19:25:23

标签: python flask ldap flask-login

我有一个Flask webapp,允许用户使用Active Directory凭据登录。我想要的是AD ' displayName' ,它只是用户名的一个属性,将在整个会话中使用。

我尝试过:

  • 用户可以成功登录和验证
  • 当登录时,它会调用LDAP来获取' displayName'属性
  • 我制作' displayName'一个全局变量,以便我可以在会话后面的表单中使用它
  • 问题是,如果另一个用户尝试访问该页面,之前登录的用户显示为displayName,因为这是一个全局变量

能够在每个用户会话的基础上调用LDAP属性的最佳方法是什么?

    def get_ldap_connection():
        conn = ldap.initialize(app.config['LDAP_PROVIDER_URL'])
        return conn

    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(100))

        def __init__(self, username, password, display_name):
            self.username = username
            self.display_name = display_name

        @staticmethod
        def try_login(username, password):
            conn = get_ldap_connection()
            conn.simple_bind_s(domain+username, password)

        @staticmethod
        def whoami(username, password):
            conn = get_ldap_connection()
            conn.simple_bind_s(domain + username, password)
            base = "OU=Users,OU=Corp,DC=mydomain,DC=ad"
            criteria = ldap.filter.filter_format('(&(objectClass=user)(sAMAccountName=%s))', [username])
        userattribute = ['displayName']

            result = conn.search_s(base, ldap.SCOPE_SUBTREE, criteria, userattribute)

            global displayName
            displayName = result[0][1]['displayName'][0]

        def is_authenticated(self):
            return True

        def is_active(self):
            return True

        def is_anonymous(self):
            return False

        def get_id(self):
            return unicode(self.id)

0 个答案:

没有答案