2.2.6. LDAP認証¶
LDAP を使った認証方式です。
Note
LDAP(Lightweight Directory Access Protocol)とは、ディレクトリサービスに接続するプロトコルのことです。
なお LDAP はソケット(socket)を使用しますので、Google AppEngine(GAE)では利用できません。
設定¶
LDAP認証では python-ldap モジュールを使用します。このため、事前にインストールしておくことが必要です。
- pyton-ldap のインストール方法
easy_install python-ldapeasy_install ではエラーが発生してインストールできない事があります。 その場合次のサイトから、ダウンロードしてインストールするか、OSのパッケージ管理ツールを使用します。
pypi python-ldap (ソース 及び Windows版インストーラのダウンロード)
login_methods
リスト値に ldap_auth()
関数を追加するか置き換えます。認証方式を置き換えた例
from gluon.contrib.login_methods.ldap_auth import ldap_auth
auth.settings.login_methods = [ldap_auth(
server='ec2-107-22-99-96.compute-1.amazonaws.com',
base_dn='ou=People,dc=paper,dc=com')]
パラメータにはLDAPサーバと、検索対象のディレクトリツリーを指定します。
認証画面は user関数の ログイン が使用されます。
- Form認証が有効時の挙動について
- 最初のログイン時、ユーザ情報と共にパスワードが保存されます。 このパスワードを web2pyの画面で変更します。すると、どちらのパスワードを使ってもログイン可能になります。 これはweb2pyで保持するパスワードで、Form認証が通りるためです。 このような挙動に問題がある場合は、Form認証を無効にするか、
login_methods
での認証方式の順序を変更してください。 詳細は 認証方式の問い合わせ順とユーザ情報登録 を参照ください。
認証用関数¶
認証用関数のパラメータについて説明します。
ldap_auth.
ldap_auth
(server, port, base_dn[, mode, secure, cert_path, bind_dn, bind_pw, filterstr])¶
- server
- LDAPサーバを指定します。デフォルトは ‘ldap’ です。
- port
サーバのポート番号を指定します。デフォルトは None です。None の場合、SSL/TLS 使用時は 636 に、その他は 389 にポートが設定されます。- base_dn
- 検索対象のツリーを指定します。デフォルトは ‘ou=users,dc=domain,dc=com’ です。
- ldap_mode
LDAP認証の動作モードを設定します。設定可能な動作モードは次の表です。デフォルトは ‘uid’ です。
動作モード 説明 uid OpenLDAP 検索対象DNは UID(UserID) uid_r OpenLDAP 複数ツリー検索、検索対象DNは UID cn OpenLDAP 検索対象DNは CN(Common Name) company OpenLDAP メールアドレス属性をディレクトリ検索 ad Microsoft Active Directory domino IBM Lotus Notes/Domino DN(Distinguished Name 識別名)- secure
- SSL/TLS でLDAP認証を行います。デフォルトは False です。 SSL/TLS を使用するには True にします。
- cert_path
SSL/TLSでクライアント認証を使う場合に、クライアント証明書のパスを指定します。デフォルトは None です。このオプションは、secure オプションが True でないと有効にはなりません。- bind_dn
Adminユーザでディレクトリ検索する場合の対象ツリーを指定します。デフォルトは None です。このパラメータは ldap_mode が ‘ac’ (ActiveDirectory)時のみ有効です。- bind_pw
- bind_dn パラメータで使用する Adminユーザのパスワードを指定します。デフォルトは None です。
- filterstr
特定部署のユーザのみを認証するなど、認証するユーザを制限するためのフィルタを指定します。デフォルトは None です。 このパラメータは ldap_mode が ‘ad’ ‘company’ そして ‘uid_r’ の時のみ有効です。
設定するフィルタは RFC4515 を順守している必要があります。 RFC4515 については、 原文 もしくは 日本語訳 を参照して下さい。
使用例¶
ldap_mode=’ uid ‘ の設定例
from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods = [ldap_auth( server='ec2-107-22-99-96.compute-1.amazonaws.com', base_dn='ou=People,dc=paper,dc=com')]LDAPサーバには AWS(Amazon Web Service)上にインストールした OpenLDAP を使用しています。この設定例での LDAP検索条件は次のようになります。uid=ユーザid, ou=People, dc=paper, dc=com
ldap_mode=’ cn ‘ の設定例
from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods = [ldap_auth(ldap_mode='cn', server='ec2-107-22-99-96.compute-1.amazonaws.com', base_dn='ou=People,dc=paper,dc=com')]この設定例での LDAP検索条件は次のようになります。
cn=ユーザid , ou=People, dc=paper, dc=comcn は検索対象が DN(識別名)でなければいけません。つまり属性値の cn では検索されません。
(左図) cn が属性値なので 検索しない(右図) cn が識別名のため 検索する
ldap_mode=’ uid_r ‘ の設定例
from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods = [ldap_auth(ldap_mode='uid_r', server='ec2-107-22-99-96.compute-1.amazonaws.com', base_dn=['ou=People,dc=paper,dc=com', 'ou=User,dc=paper,dc=com'])]uid_r を指定すると、複数の検索ツリーが指定可能です。base_dn パラメータ値はリストで指定します。この設定例での LDAP検索条件は次のようになります。uid=ユーザid, ou=People, dc=paper, dc=com かつ uid=ユーザid, ou=User, dc=paper, dc=com
ldap_mode=’ company ‘ の設定例
from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods = [ldap_auth(ldap_mode='company', server='ec2-107-22-99-96.compute-1.amazonaws.com', base_dn='ou=People,dc=paper,dc=com')]この設定例での LDAP検索条件は次のようになります。
ou=People, dc=paper, dc=com ツリーから mail=ユーザid を検索
ldap_mode=’ ad ‘ の設定例
from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods.append(ldap_auth(mode='ad', server='my.domain.controller', base_dn='ou=Users,dc=domain,dc=com'))ad(Active Directory)については、次のサイトで詳しく説明しています。
ldap_mode=’ domino ‘ の設定例
auth.settings.login_methods.append(ldap_auth(mode='domino', server='my.domino.server'))