web2py version: 1.99.4

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 email 可能    
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]

拡張ログインフォームの使用

空白の方式は専用ログインフォームを使用しません。このため拡張ログインフォームは必要ありません。

同時に利用可能な認証方式

認証方式の設定方法と拡張ログインフォームの使用有無によって、同時に使用できる認証方式が違ってくるというのを説明しました。

それでは実際に、同時に利用可能な認証方式について図に示してみます。

../../../_images/web2py_ac_069r.PNG

同時に利用可能な認証方式

まとめると、認証方式を同時に利用を可能かどうか判断する考慮点は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認証は使えないようにするか、リスト値の順序を変更します。