FastAPIにおける認証の実装方法


  1. ユーザー名とパスワードによる認証: FastAPIでは、ユーザー名とパスワードを使用して認証を行うことができます。まず、FastAPIの依存関係を使用して認証機能を実装します。以下は、簡単なコード例です。
from fastapi import Depends, FastAPI
from fastapi.security import HTTPBasic, HTTPBasicCredentials
app = FastAPI()
security = HTTPBasic()
def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
    username = credentials.username
    password = credentials.password
    # ユーザー名とパスワードの検証ロジックを実装する
    # 例: データベースからユーザー情報を取得し、パスワードをハッシュ化して検証する
    return username
@app.get("/protected")
def protected_route(username: str = Depends(get_current_username)):
    return {"message": f"Hello, {username}!"}

上記の例では、get_current_username関数でユーザー名とパスワードの検証ロジックを実装し、protected_route関数で認証が必要なエンドポイントを作成しています。

  1. JWTトークンによる認証: FastAPIでは、JWT(JSON Web Token)を使用して認証を行うこともできます。以下は、JWTトークンを使用した認証のコード例です。
from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
app = FastAPI()
security = OAuth2PasswordBearer(tokenUrl="/token")
async def get_current_username(token: str = Depends(security)):
    credentials_exception = HTTPException(
        status_code=401,
        detail="Invalid authentication credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    # JWTトークンの検証ロジックを実装する
    # 例: JWTトークンの署名を検証し、有効期限を確認する
    return username
@app.get("/protected")
def protected_route(username: str = Depends(get_current_username)):
    return {"message": f"Hello, {username}!"}

上記の例では、get_current_username関数でJWTトークンの検証を実装し、protected_route関数で認証が必要なエンドポイントを作成しています。

以上が、FastAPIでの認証の実装方法といくつかのコード例です。これらの方法を参考にして、FastAPIでセキュアなWebアプリケーションを開発してください。