Skip to content
Snippets Groups Projects
Select Git revision
  • eccc3057b6b6ccf16096558b031c6b3dc630c330
  • master default
  • ldapi-support
  • v1.3.3
  • v1.4.0
  • v1.3.2
  • v1.3.0
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v1.0.1
  • v1.0.0
  • v0.4.0
  • v0.2.0
  • v0.3.0
  • v0.1.1
  • v0.1.0
17 results

flask-simpleldap

  • Clone with SSH
  • Clone with HTTPS
  • user avatar
    Nickolay Ponomarev authored
    As noted in:
    https://github.com/admiralobvious/flask-simpleldap/issues/5
    https://github.com/admiralobvious/flask-simpleldap/issues/43
    
    - @login_required can't be used without like that, so it makes sense to
      replace it with the more basic `@basic_auth_required`.
    - It's easy to forget to configure `LDAP_HOST`, and many people probably
      are trying to connect to a pre-existing directory, instead of bringing
      up their own.
    eccc3057
    History

    Flask-SimpleLDAP

    Build Status

    Flask-SimpleLDAP provides LDAP authentication for Flask.

    Flask-SimpleLDAP is compatible with and tested on Python 3.5, 3.6 and 3.7.

    Quickstart

    First, install Flask-SimpleLDAP:

    $ pip install flask-simpleldap

    Flask-SimpleLDAP depends, and will install for you, recent versions of Flask (0.12.4 or later) and python-ldap. Please consult the python-ldap installation instructions if you get an error during installation.

    Next, add an LDAP instance to your code and at least the three required configuration options. The complete sample from examples/basic_auth/app.py looks like this:

    from flask import Flask, g
    from flask_simpleldap import LDAP
    
    app = Flask(__name__)
    #app.config['LDAP_HOST'] = 'ldap.example.org'  # defaults to localhost
    app.config['LDAP_BASE_DN'] = 'OU=users,dc=example,dc=org'
    app.config['LDAP_USERNAME'] = 'CN=user,OU=Users,DC=example,DC=org'
    app.config['LDAP_PASSWORD'] = 'password'
    
    ldap = LDAP(app)
    
    @app.route('/')
    @ldap.basic_auth_required
    def index():
        return 'Welcome, {0}!'.format(g.ldap_username)
    
    if __name__ == '__main__':
        app.run()

    You can take a look at examples/groups for a more complete example using LDAP groups.

    You can also take a look at examples/blueprints for an example using Flask's application factories and blueprints.

    OpenLDAP

    Add the LDAP instance to your code and depending on your OpenLDAP configuration, add the following at least LDAP_USER_OBJECT_FILTER and LDAP_USER_OBJECT_FILTER.

    from flask import Flask, g
    from flask_simpleldap import LDAP
    
    app = Flask(__name__)
    
    # Base
    app.config['LDAP_REALM_NAME'] = 'OpenLDAP Authentication'
    app.config['LDAP_HOST'] = 'openldap.example.org'
    app.config['LDAP_BASE_DN'] = 'dc=users,dc=openldap,dc=org'
    app.config['LDAP_USERNAME'] = 'cn=user,ou=servauth-users,dc=users,dc=openldap,dc=org'
    app.config['LDAP_PASSWORD'] = 'password'
    
    # OpenLDAP 
    app.config['LDAP_OBJECTS_DN'] = 'dn'
    app.config['LDAP_OPENLDAP'] = True
    app.config['LDAP_USER_OBJECT_FILTER'] = '(&(objectclass=inetOrgPerson)(uid=%s))'
    
    # Groups
    app.config['LDAP_GROUP_MEMBERS_FIELD'] = "uniquemember"
    app.config['LDAP_GROUP_OBJECT_FILTER'] = "(&(objectclass=groupOfUniqueNames)(cn=%s))"
    app.config['LDAP_GROUP_MEMBER_FILTER'] = "(&(cn=*)(objectclass=groupOfUniqueNames)(uniquemember=%s))"
    app.config['LDAP_GROUP_MEMBER_FILTER_FIELD'] = "cn"
    
    ldap = LDAP(app)
    
    @app.route('/')
    @ldap.basic_auth_required
    def index():
        return 'Welcome, {0}!'.format(g.ldap_username)
    
    if __name__ == '__main__':
        app.run()

    Resources