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なので正しい挙動)だが、レスポンスが返ってきた。
つづく(。・ω・。)ノシ