Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI

Cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI

PHPz
PHPzasal
2023-08-01 14:21:202765semak imbas

Cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI

Pengenalan:
Dengan pembangunan aplikasi web, pengesahan dan kebenaran pengguna telah menjadi bahagian penting. Fungsi pengesahan dan kebenaran boleh dilaksanakan dengan mudah menggunakan token JWT (JSON Web Token). FastAPI ialah rangka kerja web berasaskan Python moden yang menyediakan fungsi mudah dan mudah digunakan untuk mengendalikan pengesahan dan kebenaran. Artikel ini akan menerangkan cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI.

  1. Pasang perpustakaan bergantung
    Pertama, kita perlu memasang beberapa perpustakaan bergantung, termasuk FastAPI, PyJWT dan Passlib. Ia boleh dipasang menggunakan arahan pip:
pip install fastapi
pip install pyjwt
pip install passlib
  1. Jana kunci rahsia
    Kita perlu menjana kunci rahsia untuk menandatangani dan mengesahkan token JWT. Kunci rahsia boleh dijana menggunakan kod berikut:
import secrets

secret_key = secrets.token_urlsafe(32)
  1. Buat Model Pengguna
    Dalam FastAPI, kita perlu menentukan model pengguna untuk mewakili pengguna dalam aplikasi. Model pengguna boleh dibuat menggunakan kod berikut:
from pydantic import BaseModel

class User(BaseModel):
    username: str
    password: str
  1. Cipta fungsi penghalaan dan pengendalian
    Seterusnya, kita perlu mencipta fungsi penghalaan dan pengendalian untuk mengendalikan permintaan pengesahan dan kebenaran pengguna. Fungsi penghalaan dan pengendalian boleh dibuat menggunakan kod berikut:
from fastapi import FastAPI, HTTPException
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from passlib.context import CryptContext
from datetime import datetime, timedelta
import jwt

app = FastAPI()

pwd_context = CryptContext(schemes=["bcrypt"])
security = HTTPBearer()

# 模拟数据库中的用户
users_db = {
    "admin": {
        "username": "admin",
        "password": pwd_context.hash("admin123")
    }
}

@app.post("/login")
def login(user: User):
    if user.username not in users_db:
        raise HTTPException(status_code=401, detail="Invalid username")
    
    stored_user = users_db[user.username]
    if not pwd_context.verify(user.password, stored_user["password"]):
        raise HTTPException(status_code=401, detail="Invalid password")
    
    token = generate_token(user.username)
    return {"access_token": token}

def generate_token(username: str) -> str:
    expiration = datetime.utcnow() + timedelta(minutes=30)
    payload = {"username": username, "exp": expiration}
    return jwt.encode(payload, secret_key, algorithm="HS256")

@app.get("/users/me")
def get_user_profile(credentials: HTTPAuthorizationCredentials = security):
    token = credentials.credentials
    try:
        payload = jwt.decode(token, secret_key, algorithms=["HS256"])
        username = payload["username"]
        if username not in users_db:
            raise HTTPException(status_code=401, detail="Invalid username")
        
        return {"username": username}
    except jwt.DecodeError:
        raise HTTPException(status_code=401, detail="Invalid token")
  1. Menguji Fungsi
    Kini kami boleh menggunakan Posmen atau alat klien HTTP lain untuk menguji kefungsian kami. Pertama, kami perlu menghantar permintaan log masuk menggunakan permintaan POST dan memasukkan nama pengguna dan kata laluan dalam badan permintaan. Seperti yang ditunjukkan di bawah:

Permintaan URL: http://localhost:8000/login
Request body:

{
    "username": "admin",
    "password": "admin123"
}

Selepas berjaya log masuk, kami akan menerima respons yang mengandungi token akses. Contohnya:

{
    "access_token": "xxxxxxxxxxxxx"
}

Kami kemudiannya boleh menghantar permintaan untuk mendapatkan profil pengguna menggunakan permintaan GET, menghantar token akses sebagai token Pembawa dalam pengepala Kebenaran. Seperti yang ditunjukkan di bawah:

URL Permintaan: http://localhost:8000/users/me
Tajuk permintaan: Keizinan: Pembawa xxxxxxxxxxxxx

Jika pengesahan token berjaya, respons akan mengembalikan objek JSON yang mengandungi nama pengguna. Contohnya:

{
    "username": "admin"
}

Kesimpulan:
Artikel ini menerangkan cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI. Dengan menggunakan perpustakaan PyJWT, kami menghasilkan token JWT dan menggunakan perpustakaan Passlib untuk pengesahan cincang kata laluan. Menggunakan pendekatan ini, kami boleh melaksanakan fungsi pengesahan dan kebenaran pengguna dengan mudah untuk melindungi aplikasi web kami.

Atas ialah kandungan terperinci Cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn