django-ldap-server allow other applications to authenticate against Django accounts
using LDAP protocols.
It’s a django application packaged as a docker container. It need access to the database
used by your django application and share your user model.
Source
https://bitbucket.org/xael/django-ldap-server
Run
docker run --rm \
-e DATABASE_URL=postgres://user:password@postgres/database \
-e SLAPD_DOMAIN="dc=example,dc=company,dc=org" \
-e SLAPD_PASSWORD=adminpassword \
--link dev_postgres_1:postgres \
--network dev_default \
-p 1389:389 \
xael/django-ldap-server
Environment variables are
Mandatory
DATABASES_URL
: url of database to connect to
SLAPD_PASSWORD
: admin password for LDAP
SLAPD_DOMAIN
: Ldap domain (dc=example, dc=company, dc=org)
Optionnal
LDAP_PORT
: Listening port (default : 398)
AUTH_USER_MODEL
: Django model used for user (default : “accounts.User”)
DJANGO_SETTINGS_MODULE
: Setting files (default : “ldap_server.settings”)
You can override user model in docker container by remplacing /django/accounts/models.py
:
docker run --rm -e DATABASE_URL=postgres://user:password@postgres/database \
-e SLAPD_PASSWORD=adminpassword \
-v /path/custom_user_model.py:/django/accounts/models.py \
-p 1389:389 xael/django-ldap-server
Default user model
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import UserManager
class User(AbstractBaseUser, PermissionsMixin):
class Meta:
managed = False
objects = UserManager()
USERNAME_FIELD = 'email'
email = models.EmailField(unique=True)
first_name = models.CharField(_('First name'), max_length=300)
last_name = models.CharField(_('Last name'), max_length=300)
is_staff = models.BooleanField(_('staff status'),
default=False,
help_text=_('admin ?'))
is_active = models.BooleanField(_('active'),
default=True,
help_text=_('Utilisateur actif ?'))
Use with docker-compose
ldap:
image: xael/django-ldap-server:latest
links:
- postgres
environment:
DATABASE_URL: postgres://user:password@postgres/database
DJANGO_SETTINGS_MODULE: "ldap_server.settings"
SLAPD_DOMAIN: dc=example,dc=company,dc=org
SLAPD_PASSWORD: adminpassword
If you want to connect from an external server, you can use a ssh tunnel :
ssh:
image: polandj/alpine-ssh
ports:
- "2222:22"
links:
- ldap
environment:
AUTHORIZED_KEYS: ssh-rsa AAAA[...]rbE7n user@computer
And connect :
ssh -L 1389:ldap:389 -p 2222 root@server