技術関連メディア

OAuth2を使ってFastAPIに認証画面を用意してみた

Pythonの学習がてら、OAuth2を使ってFastAPIに認証画面を用意してみました。

≪今回の実行環境≫

OS:Windows11

言語:Python 3.12.2

IDE:VSCode

仮想環境:venv

ターミナル:cmd

Framework:FastAPI

任意のpyファイルに下記を記載する。

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
    return {"token": token}

保存をしたら、OAuth2がユーザー名やパスワードを送信するためのフォームデータが必要なので、ターミナルでpython-multipartをインストールする。

pip install python-multipart

Successfully installed~が出たら、引き続きターミナルにて

uvicorn main:app --reload

で実行し、ブラウザのURL欄にhttp://127.0.0.1:8000/docsを貼り付けて表示してみる。

Authorizeをクリックし、認証画面が表示されることを確認。

トークンをstrで返してみる。

コードの解説としてはこのようになる。

#Dependsとは依存関係を持った呼び出しに使う関数で、宣言することでFastAPIが代わりに呼び出しを実行。
from fastapi import Depends, FastAPI
#OAuth2PasswordBearerはユーザー名とパスワードを送信するPathを渡してインスタンス化を行い、URLがトークン取得に使われることをFastAPIに知らせる。
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

#クライアントがトークンを取得するためにユーザー名とパスワードを送信するURLを指定。
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

#oauth2_schemeをDependsで依存関係に渡し、リクエストの中にAuthorizationヘッダーを探し、トークンを含んでいるかどうかをチェックしてstrとして返す。
@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
    return {"token": token}

確認手順としては、Try it outをクリックして、

Excuseをクリックする。

トークンの検証は未実装のため401(Unauthorizedなので正しい挙動)だが、レスポンスが返ってきた。

つづく(。・ω・。)ノシ

参照

FastAPI公式

FastAPI を使ってWEBアプリを作ってみる その8

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA