.. meta:: :keywords: web2py, framework, Access control, アクセス制御, 認証, 各認証方式 .. raw:: html
web2py version: 1.99.4
.. _ac_methods_outline: 各認証方式の概要 ================ モジュール ---------- 標準で使用可能な Form認証 以外の認証方式については、モジュールが次のディレクトリ下に存在します。 :: /gluon/contrib/login_method/ 使用する場合はインポートし、各認証方式の説明に従って必要な設定を行う必要があります。 設定方法 -------- 認証方式を使用するためには、次の属性値を変更する必要があります。 .. currentmodule:: tools .. attribute:: Auth.settings.login_methods 認証用関数を指定します。リスト値で設定しますので、複数の認証関数を指定することが可能です。 デフォルト値は [auth] です( auth.settings.login_methods = [auth] )。[auth]はForm認証のことを示しています。 設定例( Form認証→SMTP認証 順に問い合わせ ) :: from gluon.contrib.login_methods.email_auth import email_auth auth.settings.login_methods.append(email_auth("smtp.gmail.com:587", "@gmail.com")) 設定例( SMTP認証→Form認証 順に問い合わせ ) :: from gluon.contrib.login_methods.email_auth import email_auth auth.settings.login_methods.insert(0, email_auth("smtp.gmail.com:587", "@gmail.com")) 設定例( SMTP認証のみ利用 ):: from gluon.contrib.login_methods.email_auth import email_auth auth.settings.login_methods = [email_auth("smtp.gmail.com:587", "@gmail.com")] .. attribute:: Auth.settings.login_form 認証用ログインフォームを指定します。値には使用する認証方式のインスタンスを設定します。 この属性値に複数のインスタンスは指定できません。 デフォルト値は auth です( auth.settings.login_form = auth )。 設定例( OpenIDを利用 ) :: from gluon.contrib.login_methods.openid_auth import OpenIDAuth auth.settings.login_form = OpenIDAuth(auth) どちらを設定するかは、認証方式によって変わります。 .. _ac_methods_variance: 各認証方式での挙動の違い ------------------------ 設定方法以外でも各認証方式では、少しずつ挙動が違っています。いくつか項目を使って説明します。 ユーザIDの保存フィールド Form認証はデフォルトのIDは **メールアドレス** です。メールアドレスの場合は、auth_userテーブルの emailフィールドに保存します。 :func:`~Auth.define_table` のパラメータ username が True の場合、 auth_userテーブルに username フィールドが追加され、IDに **ユーザ名** が使用できます( :ref:`ac_setup` )。 From認証以外では各々の認証方式によって、保存するフィールドが違います。 未登録ユーザIDでのログイン Form認証ではユーザ登録がないIDではログインできません。Basic認証も同様です。 しかし他の多くの認証方式では、ユーザ登録がないIDでもログインが可能です。 この場合ログインと共に、ユーザ登録が自動で行われます。 OpenIDについてはログイン可能なのですが、Form認証のユーザとの紐付けが必要になります。 これについては、 :ref:`ac_authentication_openid` で説明します。 拡張ログインフォーム :attr:`~Auth.settings.login_form` に設定するタイプの認証方式にでは、専用のログインフォームを使用するため他の 認証方式には対応できません。しかし拡張ログインフォームを使用すれば、Form認証のログインフォームとも共存できます。 注意点として拡張ログインフォームは、他の専用ログインフォームを持つ認証方式とは共存できません。 また Googleアカウント認証は、拡張ログインフォームを利用できません。 ユーザ管理機能 :ref:`ac_user` については、Form認証(及び Basic認証)以外では使用できない機能と、あまり意味がない機能があります。 使用できない機能 * :ref:`ac_user_verify_email` あまり意味がない機能 * :ref:`ac_user_retrieve_username` * :ref:`ac_user_request_reset_password` * :ref:`ac_user_reset_password` 必要に応じて、user関数の機能を無効にして下さい。無効化については :attr:`~Auth.settings.actions_disabled` を参照ください。 これらの挙動の違いをまとめたのが次の表です。 .. csv-table:: :header: 認証方式,設定方法,ID保存フィールド,[#f1]_,[#f2]_,[#f3]_ :widths: 15, 10, 20 ,10 ,5 ,5 Form , デフォルト ,email もしくは username ,登録 , , Basic , :attr:`~Auth.settings.login_methods` ,email もしくは username ,登録 , , SMTP , :attr:`~Auth.settings.login_methods` ,email ,可能 , , Googleアカウント, :attr:`~Auth.settings.login_form` ,email もしくは username ,可能 ,使用,不可 Janrain Engage , :attr:`~Auth.settings.login_form` ,registration_id ,可能 ,使用,可能 LDAP , :attr:`~Auth.settings.login_methods` ,email もしくは username ,可能 , , OpenID , :attr:`~Auth.settings.login_form` , alt_loginsテーブルの username ,紐付け,使用,可能 .. [#f1] **未登録ユーザIDでのログイン** | 登録 ・・・・・ ユーザ登録が必要 | 可能 ・・・・・ ログイン時に自動でユーザ登録 | 紐付け ・・・ ログイン可能だがユーザとの紐付けが必要 .. [#f2] **専用ログインフォームを使用** 空白の方式は専用ログインフォームを使用しません。 .. [#f3] **拡張ログインフォームの使用** 空白の方式は専用ログインフォームを使用しません。このため拡張ログインフォームは必要ありません。 .. _ac_authentication_methods_simultaneity: 同時に利用可能な認証方式 ------------------------ 認証方式の設定方法と拡張ログインフォームの使用有無によって、同時に使用できる認証方式が違ってくるというのを説明しました。 それでは実際に、同時に利用可能な認証方式について図に示してみます。 .. figure:: ../../../images/web2py_ac/web2py_ac_069r.PNG 同時に利用可能な認証方式 まとめると、認証方式を同時に利用を可能かどうか判断する考慮点は2つあります。 * 認証設定で、 :attr:`~Auth.settings.login_form` にインスタンスを設定するかどうか 専用フォームを利用する認証方式は、基本的に1つしか認証方式を選べません。 * 拡張ログインオームを利用できるかどうか 専用フォームを利用する認証方式でも拡張ログインフォームを利用すれば、通常のログインフォームと併用可能です。 .. _ac_authentication_orderby_methods_register_inf_user: 認証方式の問い合わせ順とユーザ情報登録 -------------------------------------- 認証方式の問い合わせ順 :attr:`~Auth.settings.login_methods` のリスト値に認証方式を追加した場合、web2py はリスト値に従って順番に、 登録されている認証方式を試していきます。リスト値のデフォルト値は [auth] です。 このため認証方式を追加した場合、Form認証と追加した認証方式を順番に試していきます。設定例を示してみます。 :: from gluon.contrib.login_methods.email_auth import email_auth auth.settings.login_methods.append(email_auth("smtp.gmail.com:587", "@gmail.com")) from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods.append(ldap_auth( server='ec2-107-22-99-96.compute-1.amazonaws.com', base_dn='ou=People,dc=paper,dc=com')) この設定では、Form認証→SMTP認証→LDAP認証 の順に認証を試していきます。 もし特定の認証方式だけ動かしたい場合は、リスト値を上書きする必要があります。 :: from gluon.contrib.login_methods.email_auth import email_auth auth.settings.login_methods = [email_auth("smtp.gmail.com:587", "@gmail.com")] この設定では SMTP認証のみ試します。 リスト値ですので、順番を入れ替えることが可能です。 :: from gluon.contrib.login_methods.email_auth import email_auth auth.settings.login_methods.insert(0, email_auth("smtp.gmail.com:587", "@gmail.com")) from gluon.contrib.login_methods.ldap_auth import ldap_auth auth.settings.login_methods.insert(1, ldap_auth( server='ec2-107-22-99-96.compute-1.amazonaws.com', base_dn='ou=People,dc=paper,dc=com')) SMTP認証→LDAP認証→Form認証 の順に認証を試します。 ログイン時のユーザ情報登録 ログイン時の認証方式によってユーザ情報を、 auth_user テーブルに登録するタイプとしないタイプがあります。 :attr:`~Auth.settings.login_methods` 属性に設定するタイプの認証方式は、ユーザ情報をコピーして登録します。 登録する情報は、ユーザ名・メールアドレス・パスワード などです。もし :attr:`~Auth.settings.login_methods` のリスト値に auth が含まれない場合は、パスワードは登録しません。 ユーザが登録されていない場合、ユーザ情報をコピー登録します。 既にユーザが登録されておりパスワードが違っている場合は、パスワードを更新します。 コピーしたユーザ情報での認証 :attr:`~Auth.settings.login_methods` リスト値の先頭に auth が設定されている(デフォルト)場合、 Form認証でもコピーしたユーザ情報での認証が可能になります。 web2py はユーザとパスワードの組み合わせで、各認証方式に問い合わを行います。 このため一方のパスワードを変更した場合、順番に問い合わせを行い、パスワードが一致する方式で認証が行われます。 この時、他の方式で認証した場合は、コピーしたForm認証ユーザのパスワードを更新します。 Form認証のパスワードでログイン → Form認証で認証が行われます。 他の認証方式のパスワードでログイン → 他の方式で認証が行われると共に、コピーしたForm認証ユーザのパスワードが更新されます。 このような動作が困る場合、リスト値を上書きしてForm認証は使えないようにするか、リスト値の順序を変更します。