FastAPI

FastAPIでJWT認証を実装する方法

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

FastAPIとJWT認証の概要

Webアプリケーション開発において、ユーザー認証はセキュリティとユーザーエクスペリエンスの両面で不可欠な要素です。特にREST APIでは、認証情報の共有を避けながら信頼性のあるアクセス制御を行う必要があります。この記事では、FastAPIという高性能なPythonフレームワークにおいて、JSON Web Token(JWT)による認証機能の実装手順をステップバイステップで解説します。初心者でも理解しやすいように、コード例と具体的な操作手順を併記し、即戦力となる知識をお届けします。


FastAPIプロジェクト初期設定

FastAPIは開発効率が高く、TypeScriptやSwagger UIなどもサポートするため、バックエンドエンジニアの間で人気があります。認証機能を実装するにあたり、まずプロジェクトの基本構造を作成します。

必要なパッケージのインストール

FastAPIとJWTを扱うには以下のようなライブラリが必要です。

  1. fastapi:フレームワーク本体
  2. uvicorn:ASGIサーバー(開発用)
  3. pyjwt:JWTトークンの発行・検証
  4. python-dotenv:環境変数の読み込み (オプション)

以下のコマンドでインストールしてください。

基本的なアプリケーション構造

プロジェクトディレクトリにmain.pyを作成し、以下のようにして初期設定します。

この構造を基盤として、認証が必要なエンドポイント(例:/login/protected)を追加していきます。


JWTトークン発行処理

ユーザーがログインする際、APIはJWTトークンを発行します。このトークンをクライアントが持つことで、後続のリクエストで認証されます。

トークン発行用のエンドポイント作成

以下に/loginというエンドポイントでトークンを発行するコードを示します。

環境変数でのSECRET_KEY管理推奨

このコードでは、ユーザー名とパスワードを確認してトークンを作成し、HTTP 200 OKで返却します。環境変数を使用することでセキュリティ強化が可能です。


トークン検証ミドルウェア構築

認証が必要なエンドポイントに対しては、JWTの検証処理を自動的に実行するミドルウェアを設置します。これは依存性(Depends)機能を利用して実現できます。

ミドルウェアクラスの定義

以下のようにget_current_userという関数を作成し、トークンが有効かどうかを検証します。

この関数は、Depends(get_current_user)のようにしてエンドポイントに適用されます。OAuth2認証スキームを定義し、トークンが有効であることを検証する仕組みになります。


セキュリティ注意点

JWT認証を実装する際には、いくつかのセキュリティ的な配慮が必要です。

暗号化アルゴリズムの選択比較表

トークン有効期限の設定

  • 有効期間ACCESS_TOKEN_EXPIRE_MINUTESのようなパラメータで調整。
  • リフレッシュトークン:長期間利用する場合は、別途管理が必要です(本記事では省略)。

blockquote: トークン有効期限を過度に長く設定すると、セキュリティリスクが高まるため注意してください。また、リフレッシュトークンは単独で管理し、アクセストークンと分離する必要があります。


サンプルコード実装

ここまで解説した内容を組み合わせた全体像と、動作確認方法を示します。

全体像の確認(保護エンドポイント例)

動作検証手順

  1. アプリケーション起動uvicorn main:app --reloadでサーバーを起動。
  2. トークン発行:PostmanやcurlでPOST /loginにアクセスし、トークンを取得。
  3. 認証付きリクエスト:取得したトークンをAuthorization: Bearer [トークン]ヘッダーに含めて、保護されたエンドポイントへリクエスト。

まとめ

  • FastAPIではJWT認証を簡潔かつ効率的に実装できます。
  • 初期設定とトークン発行処理は、PyJWTライブラリを活用して手軽に実装可能です。
  • ミドルウェアによって自動でトークン検証を行うことで、セキュリティも確保できます。
  • 暗号化アルゴリズムや有効期限の設定には注意が必要です。

この記事を参考にして、FastAPIアプリケーションの認証機能を実装し、ユーザーごとのアクセス制御を導入してみてください。


スポンサードリンク

-FastAPI