38
@msrks

Flaskで Basic認証、Digest認証

この記事は最終更新日から3年以上が経過しています。

Flask拡張であるFlask-HTTPAuthを使うと、とても簡単に実現できます。

インストール

$ pip install flask-httpauth

Basic認証

  1. from flask_httpauth import HTTPBasicAuth する
  2. auth = HTTPBasicAuth()authインスタンスをつくる
  3. パスワードを確認する関数をつくる: @auth.get_passwordでデコレートする
  4. 認証したい URLを @auth.login_requiredでデコレートする
app.py
from flask import Flask
from flask_httpauth import HTTPBasicAuth

app = Flask(__name__)
auth = HTTPBasicAuth()

users = {
    "john": "hello",
    "susan": "bye"
}

@auth.get_password
def get_pw(username):
    if username in users:
        return users.get(username)
    return None

@app.route('/')
@auth.login_required
def index():
    return "Hello, %s!" % auth.username()

if __name__ == '__main__':
    app.run()

Digest認証

ユーザー名とパスワードを MD5でハッシュ化してからサーバーに送る。Basic認証で防げなかった盗聴や改竄への対策。

HTTPBasicAuthHTTPDigestAuthに変えるだけ。

app.py
from flask import Flask
from flask_httpauth import HTTPDigestAuth

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret key here'
auth = HTTPDigestAuth()

users = {
    "john": "hello",
    "susan": "bye"
}

@auth.get_password
def get_pw(username):
    if username in users:
        return users.get(username)
    return None

@app.route('/')
@auth.login_required
def index():
    return "Hello, %s!" % auth.username()

if __name__ == '__main__':
    app.run()

ToDo: pathlib, itsdangerousについて調べる

38
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
msrks
Computer Scienceと物理が好きです

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
エンジニアによるマネジメント - エンジニアだからこそ発信できるマネジメントの知識を発信しよう
~
Microsoft Buildで発表された技術情報に関する記事を投稿しよう!
~