FastAPIにおけるJWT認証
認証は「あなたは誰ですか?」と問いかけます。 認可は「あなたは何ができますか?」と問いかけます。
セキュリティなしでAIプラットフォームを構築すると、誰でもプライベートなデータにアクセスできてしまいます。ユーザープロファイルを変更したり、生徒の学習進捗を閲覧したりすることも可能です。リソースを保護しなければなりません。
JWT (JSON Web Token) がこれを解決します。リクエストのたびにパスワードを送信する代わりに、ユーザーは安全なトークンを送信します。
ワークフロー:
- ユーザー登録
- パスワードのハッシュ化
- ログインと認証情報の検証
- JWTトークンの生成
- 保護されたルートへのアクセス
以下のツールを使用する必要があります:
- パスワードハッシュ化には bcrypt を使用した passlib
- トークン生成には python-jose
パスワードを平文で保存してはいけません。ハッカーがデータベースを盗んだ場合、すべてが流出してしまいます。代わりに、ハッシュを保存してください。
ハッシュは「password123」をランダムな長い文字列に変換します。ハッシュを元のパスワードに戻すことはできません。入力された値がハッシュと一致するかどうかのみを検証します。
構築方法:
ユーザー登録 ユーザーがユーザー名とパスワードを送信します。パスワードをハッシュ化し、データベースに保存します。
ログイン ユーザーが認証情報を送信します。保存されているハッシュを探し、ライブラリを使用してパスワードを検証します。一致した場合、トークンを作成します。
JWTの生成 トークンにはユーザーデータと有効期限が含まれます。シークレットキーを使用してトークンに署名します。ユーザーがデータを改ざんしようとすると、署名の検証に失敗します。
ログインのレスポンスは以下のようになります: { "access_token": "eyJhbGciOiJIUzI1Ni...", "token_type": "bearer" }
これで、ユーザーはシステムへの鍵を保持することになります。
次のパートでは、これらのトークンを使用して特定のルートを保護し、ユーザーロールを管理する方法を学びます。
手順のまとめ:
- ユーザー登録
- パスワードのハッシュ化と保存
- ログイン時のパスワード検証
- 署名付きJWTの生成
Source: https://dev.to/zeroshotanu/fastapi-for-ai-engineers-part-6-jwt-authentication-in-fastapi-5fpk
Optional learning community: https://t.me/GyaanSetuAi