概要
WSGIを使ってデプロイしているFlaskアプリケーションに.htaccessでBasic認証をかけようとしたができなかったので、別の方法を試してみた。
はじめに
この記事では、すでにWGSIを用いてFlaskアプリケーションがデプロイされた状態での記事になっています。
【Raspberry Pi】Apache+WSGI+Python Flaskを使ってhttpsでWebアプリケーションを公開する - Qiita
使用環境
- Raspbian 10.7
- Apache 2.4.38
- Python 3.7.3
- Flask 1.0.2
- Flask-httpauth 4.2.0
環境構築
Flaskアプリケーションの設定
flask-httpauthのインストール
RaspberryPi上でFlaskでBasic認証を可能にするパッケージをインストールします。筆者の環境はPython3なのでpip3
コマンドを使用しますが、Python2を使用しているならpip
を使用します。
$sudo pip3 install flask-httpauth
app.pyの編集
以下のようなFlaskアプリケーションを用意します。
from flask import Flask
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
auth = HTTPBasicAuth()
users = {
"user1": "password"
}
@auth.verify_password
def verify_password(username, password):
if username in users and password == users.get(username):
return username
@app.route('/')
@auth.login_required
def hello():
return 'Hello {}!'.format(auth.current_user())
if __name__ == '__main__':
app.run()
@auth.get_password
はパスワードを取得するために使用され、認証には非推奨とのことなので、@auth.verify_password
を使用しています。
@auth.login_required
はBasic認証を突破出来たら、その先を実行する機能です。
この時点でBasic認証はできるようになっていますが、今のままでは何を入力しても認証はできません。
Apacheの設定
configファイルの編集
前の記事で作成したconfファイルのWSGIを記載した部分に以下の内容を追記します。
WSGIPassAuthorization On
これによりWSGIアプリケーションへHTTP承認を受け渡すことができるので、Basic認証が正常に使えるようになります。
Apache2の再起動
忘れずにApache2のロードも行っておきます。
$sudo systemctl reload apache2
正常に再起動できたら、実際の画面を開いてBasic認証が作動するか確認します。
お疲れさまでした。
まとめ
今回は、httpsで動作していたのでシンプルなベーシック認証を実装しましたが、セキュリティの関係上ダイジェスト認証の方がいいのかなーって思います。
あと、今のままだとユーザ名とパスワードがべた書きなのでハッシュ関数なども導入してもう少し実用的な機能にしたいと思います。いずれ...