web2py version: 1.99.4

2.2.2. Basic 認証

From認証が使用できない状況下で利用します。 例えば、 REST(Representational State Transfer)などのWebサービスで使用します。

Note

Basic 認証とは HTTP プロトコルが備える、最も基本的な認証方式です。

設定

設定前に アクセス制御の基本的な設定 を完了しておく必要があります。また 各認証方式での挙動の違い も参照下さい。
モデル定義(db.pyなど)にて、 login_methods リスト値に basic_auth() 関数を追加するか置き換えます。

認証方式を追加した例

from gluon.contrib.login_methods.basic_auth import basic_auth
auth.settings.login_methods.append(basic_auth())

次に、auth.settings.allow_basic_login 属性値を True に変更します(デフォルトは False)。

auth.settings.allow_basic_login = True

これによって、Basic認証が利用可能となります。

Basic認証では平文でID及びパスワードを送ります。このため安全性を高めるには、SSL/TLS(HTTPS)を使用した暗号化が望ましいです。

また、 auth.settings.allow_basic_login の属性値は、Basic認証の動作状態を容易に変更可能です。Basic認証が必要な状況時だけ属性値を True に変更し、通常は False にするなどの運用が可能です。

Basic認証を別サーバで行う場合は、basic_auth関数に認証用サーバをパラメータで指定します。

from gluon.contrib.login_methods.basic_auth import basic_auth
auth.settings.login_methods.append(basic_auth('http://server.example.com'))

認証用関数

認証用関数のパラメータについて説明します。

basic_auth.basic_auth([server="http://127.0.0.1"])
server
Basic認証を行うサーバを指定します。デフォルト値は ” http://127.0.0.1 ” です。

使用例

Wget を使った使用例を示します。

まず、Wget をインストールします。さらに Wget がアクセスできるように、テスト用関数を定義します。今回はシステム時刻を返す簡単なサンプルです。

テスト用サンプル関数(default.py)

@auth.requires_login()
def give_me_time():
    import time
    return time.ctime()

Wget をこの関数に対して実行してみます。Wget の構文は次のように auth-no-challenge オプションを付ける必要があります。 このオプションが無いと、ログイン画面にリダイレクトしようとします。

wget --auth-no-challenge --user=id --password=password URL

user にはユーザID、password にはパスワードを設定します。

実行結果

C:\>wget --auth-no-challenge --user=testuser@example.com --password=aaaa http://127.0.0.1:8000/myapp/default/give_me_time
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files\GnuWin32/etc/wgetrc
--2012-01-01 00:00:00--  http://127.0.0.1:8000/myapp/default/give_me_time
127.0.0.1:8000 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 24 [text/html]
`give_me_time' に保存中

100%[======================================>] 24          --.-K/s 時間 0s

2012-01-01 00:00:00 (533 KB/s) - `give_me_time' へ保存完了 [24/24]