本記事の目的
Ubuntu20.04 上に Django を構築し、LDAP クライアントとして活用できるようにするまでの手順をまとめておく。目指すイメージは以下の通り。
LDAP サーバについては、以下記事で作成したものを流用。
したがって、LDAP は以下のような構成になってます。
参考記事
- Django のインストール
- Django への LDAP 設定
手順
インストール時のエラーについて
django-auth-ldap のインストール時にエラー発生したが、そちらの解決については以下 URL に記載している。
手順詳細
基本は上の URL に従えば OK。
- django-auth-ldap のインストール
$ pip install django-auth-ldap
- settings.py に以下を追記する。
import ldap
from django_auth_ldap.config import LDAPSearch
(中略)
AUTHENTICATION_BACKENDS = [
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
]
AUTH_LDAP_SERVER_URI = "ldap://192.168.56.102"
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"ou=people,dc=hoge,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)"
)
※ AUTHENTICATION_BACKENDS をこのような書き方にしているのは、"django_auth_ldap.backend.LDAPBackend" だけだと全ユーザが LDAP でしかログインできなくなることを踏まえて。管理者ユーザは LDAP を使わずにログインできる仕様としたかったので、このような書き方にした。
- user001 で、Django にログイン試行する。
- このタイミングではおそらくログイン失敗するが、Django 上に user001 のアカウントは自動作成されているので、LDAP クライアントとしては正しく設定されている様子。
- user001 の詳細から、Staff status にチェックを入れてあげると、user001 でのログインが可能となる。
最後に
- ユーザのログインについては、Staff status にチェックをしているのがデフォルトで認証できると嬉しいけど今回はそこまでは確認せず。。Django の設定でできるような気はするけど、ドキュメントをもっと読まねば。
- LDAP 認証しているユーザについて、パスワード変更しようとした場合にどういう挙動になるのかも確認できてない。本格運用するとなったら、もっと細かいところまで実装見る必要ありそう。
- Active Directory とか使った場合にどうなるのかも今後みてみたい。