.. meta:: :keywords: web2py, framework, Access control, アクセス制御, 認証, LDAP .. raw:: html
web2py version: 1.99.4
.. _ac_authentication_ldap: LDAP認証 ======== LDAP を使った認証方式です。 .. note:: LDAP(Lightweight Directory Access Protocol)とは、ディレクトリサービスに接続するプロトコルのことです。 なお LDAP はソケット(socket)を使用しますので、Google AppEngine(GAE)では利用できません。 設定 ---- LDAP認証では python-ldap モジュールを使用します。このため、事前にインストールしておくことが必要です。 pyton-ldap のインストール方法 :: easy_install python-ldap easy_install ではエラーが発生してインストールできない事があります。 その場合次のサイトから、ダウンロードしてインストールするか、OSのパッケージ管理ツールを使用します。 `pypi python-ldap `_ (ソース 及び Windows版インストーラのダウンロード) | 設定前に :ref:`ac_setup` を完了しておく必要があります。また :ref:`ac_methods_variance` も参照下さい。 | モデル定義(db.pyなど)にて、 :attr:`~Auth.settings.login_methods` リスト値に :func:`~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関数の :ref:`ac_user_login` が使用されます。 **Form認証が有効時の挙動について** 最初のログイン時、ユーザ情報と共にパスワードが保存されます。 このパスワードを web2pyの画面で変更します。すると、どちらのパスワードを使ってもログイン可能になります。 これはweb2pyで保持するパスワードで、Form認証が通りるためです。 このような挙動に問題がある場合は、Form認証を無効にするか、 :attr:`~Auth.settings.login_methods` での認証方式の順序を変更してください。 詳細は :ref:`ac_authentication_orderby_methods_register_inf_user` を参照ください。 認証用関数 ---------- 認証用関数のパラメータについて説明します。 .. py:module:: ldap_auth .. py:function:: 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=com cn は検索対象が DN(識別名)でなければいけません。つまり属性値の cn では検索されません。 .. figure:: ../../../images/web2py_ac/web2py_ac_079r.PNG :figwidth: 100% :align: left | (左図) 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)については、次のサイトで詳しく説明しています。 `How to set up web2py + ldap with Windows Active Directory `_ ldap_mode=' **domino** ' の設定例 :: auth.settings.login_methods.append(ldap_auth(mode='domino', server='my.domino.server'))