FalconのWebサービスを認証保護してみる
RESTful Webサービスの保護
falcon-authは次の認証をサポートしています。
HTTP Basic認証: BasicAuthBackend
トークンベース認証:BasicAuthBackend
単純なトークンベース認証を提供します。
JWT認証:JWTAuthBackend
Hawk認証:HawkAuthBackend
Hawkによって定義されたHolder-Of-Key認証を提供します。` ダミー認証:NoneAuthBackend
このバックエンドは認証チェックを実行しません。 認証されていないユーザーにフォールバックを提供するために、MultiAuthBackend と共に使用します。
マルチバックエンド認証: MultiAuthBackend
2つ以上の認証バックエンドを入力として受け取り、正常に処理するバックエンドのどちらかが成功した場合は認証し、それ以外の場合は falcon.HTTPUnauthorized の例外を発生させます。
インストール
falcon-authをインストールします。
code: bash
$ pip install falcon-auth
認証を追加
app.py に以下のコードを追加します。
code: python
from falcon_auth import FalconAuthMiddleware, BasicAuthBackend
# ...
def user_loader(username, password):
if (username in Allow_Users.keys() and
return username
else:
return None
auth_middleware = FalconAuthMiddleware(BasicAuthBackend(user_loader))
FalconAuthMiddleware() で認証を設定します。
引数のuser_loader() はユーザーとともに呼び出されるコールバック関数です。
Authorizationヘッダーから抽出された資格情報(ユーザー名とパスワード)と一致するユーザーが存在する場合は認証されたユーザーを返します。ユーザーが見つからないか資格情報が一致しない場合はNoneを返します。
このときキーワード引数excempt_routesに認証を除外するURLパス、exempt_methodsに認証を除外するHTTPプロトロルメソッドを指定します。
code: bash
{
"title": "401 Unauthorized",
"description": "Missing Authorization Header"
}
code: bash
{
"tasks": [
{
"title": "Buy Beer",
"description": "IPA 6 bottles",
"done": false,
},
{
"title": "Buy groceries",
"description": "Beef, Tofu, Sting Onion",
"done": false,
}
]
}
code: bash
{
"title": "401 Unauthorized",
"description": "Invalid Username/Password"
}