2.2.1. 各認証方式の概要¶
モジュール¶
標準で使用可能な Form認証 以外の認証方式については、モジュールが次のディレクトリ下に存在します。
/gluon/contrib/login_method/使用する場合はインポートし、各認証方式の説明に従って必要な設定を行う必要があります。
設定方法¶
認証方式を使用するためには、次の属性値を変更する必要があります。
-
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")]
-
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)
どちらを設定するかは、認証方式によって変わります。
各認証方式での挙動の違い¶
設定方法以外でも各認証方式では、少しずつ挙動が違っています。いくつか項目を使って説明します。
ユーザIDの保存フィールド
Form認証はデフォルトのIDは メールアドレス です。メールアドレスの場合は、auth_userテーブルの emailフィールドに保存します。
define_table()
のパラメータ username が True の場合、 auth_userテーブルに username フィールドが追加され、IDに ユーザ名 が使用できます( アクセス制御の基本的な設定 )。From認証以外では各々の認証方式によって、保存するフィールドが違います。
未登録ユーザIDでのログイン
Form認証ではユーザ登録がないIDではログインできません。Basic認証も同様です。
しかし他の多くの認証方式では、ユーザ登録がないIDでもログインが可能です。 この場合ログインと共に、ユーザ登録が自動で行われます。
OpenIDについてはログイン可能なのですが、Form認証のユーザとの紐付けが必要になります。 これについては、 OpenID で説明します。
拡張ログインフォーム
login_form
に設定するタイプの認証方式にでは、専用のログインフォームを使用するため他の 認証方式には対応できません。しかし拡張ログインフォームを使用すれば、Form認証のログインフォームとも共存できます。注意点として拡張ログインフォームは、他の専用ログインフォームを持つ認証方式とは共存できません。 また Googleアカウント認証は、拡張ログインフォームを利用できません。
ユーザ管理機能
ユーザ管理機能(user関数) については、Form認証(及び Basic認証)以外では使用できない機能と、あまり意味がない機能があります。
- 使用できない機能
- あまり意味がない機能
必要に応じて、user関数の機能を無効にして下さい。無効化については
actions_disabled
を参照ください。
これらの挙動の違いをまとめたのが次の表です。
認証方式 設定方法 ID保存フィールド [1] [2] [3] Form デフォルト email もしくは username 登録 Basic login_methods
email もしくは username 登録 SMTP login_methods
可能 Googleアカウント login_form
email もしくは username 可能 使用 不可 Janrain Engage login_form
registration_id 可能 使用 可能 LDAP login_methods
email もしくは username 可能 OpenID login_form
alt_loginsテーブルの username 紐付け 使用 可能
[1] 未登録ユーザIDでのログイン
登録 ・・・・・ ユーザ登録が必要可能 ・・・・・ ログイン時に自動でユーザ登録紐付け ・・・ ログイン可能だがユーザとの紐付けが必要
[2] 専用ログインフォームを使用
空白の方式は専用ログインフォームを使用しません。
[3] 拡張ログインフォームの使用
空白の方式は専用ログインフォームを使用しません。このため拡張ログインフォームは必要ありません。
同時に利用可能な認証方式¶
認証方式の設定方法と拡張ログインフォームの使用有無によって、同時に使用できる認証方式が違ってくるというのを説明しました。
それでは実際に、同時に利用可能な認証方式について図に示してみます。
同時に利用可能な認証方式
まとめると、認証方式を同時に利用を可能かどうか判断する考慮点は2つあります。
- 認証設定で、
login_form
にインスタンスを設定するかどうか- 専用フォームを利用する認証方式は、基本的に1つしか認証方式を選べません。
- 拡張ログインオームを利用できるかどうか
- 専用フォームを利用する認証方式でも拡張ログインフォームを利用すれば、通常のログインフォームと併用可能です。
認証方式の問い合わせ順とユーザ情報登録¶
認証方式の問い合わせ順
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 テーブルに登録するタイプとしないタイプがあります。
login_methods
属性に設定するタイプの認証方式は、ユーザ情報をコピーして登録します。 登録する情報は、ユーザ名・メールアドレス・パスワード などです。もしlogin_methods
のリスト値に auth が含まれない場合は、パスワードは登録しません。ユーザが登録されていない場合、ユーザ情報をコピー登録します。 既にユーザが登録されておりパスワードが違っている場合は、パスワードを更新します。
コピーしたユーザ情報での認証
login_methods
リスト値の先頭に auth が設定されている(デフォルト)場合、 Form認証でもコピーしたユーザ情報での認証が可能になります。web2py はユーザとパスワードの組み合わせで、各認証方式に問い合わを行います。 このため一方のパスワードを変更した場合、順番に問い合わせを行い、パスワードが一致する方式で認証が行われます。 この時、他の方式で認証した場合は、コピーしたForm認証ユーザのパスワードを更新します。
- Form認証のパスワードでログイン
- → Form認証で認証が行われます。
- 他の認証方式のパスワードでログイン
- → 他の方式で認証が行われると共に、コピーしたForm認証ユーザのパスワードが更新されます。
このような動作が困る場合、リスト値を上書きしてForm認証は使えないようにするか、リスト値の順序を変更します。