如何在fastapi中使用jwt令牌进行身份验证和授权
简介:
随着Web应用程序的发展,用户身份验证和授权成为了一个至关重要的部分。使用JWT(JSON Web Token)令牌可以方便地实现身份验证和授权功能。 FastAPI是一个基于Python的现代Web框架,它提供了简单易用的功能来处理身份验证和授权。本文将介绍如何在fastapi中使用jwt令牌进行身份验证和授权。
pip install fastapi pip install pyjwt pip install passlib
import secrets secret_key = secrets.token_urlsafe(32)
from pydantic import BaseModel
class User(BaseModel):
username: str
password: strfrom 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")请求URL:http://localhost:8000/login
请求体:
{
"username": "admin",
"password": "admin123"
}成功登录后,我们将收到一个包含访问令牌的响应。例如:
{
"access_token": "xxxxxxxxxxxxx"
}然后,我们可以使用GET请求发送获取用户资料的请求,将访问令牌作为Authorization头部的Bearer令牌发送。如下所示:
请求URL:http://localhost:8000/users/me
请求头部:Authorization: Bearer xxxxxxxxxxxxx
如果令牌验证成功,响应将返回一个包含用户名的JSON对象。例如:
{
"username": "admin"
}结束语:
本文介绍了如何在fastapi中使用jwt令牌进行身份验证和授权。通过使用PyJWT库,我们生成了JWT令牌,并使用Passlib库进行密码哈希验证。使用这种方法,我们可以轻松地实现用户身份验证和授权功能,从而保护我们的Web应用程序。
以上就是如何在FastAPI中使用JWT令牌进行身份验证和授权的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号