当前位置: 首页 > wzjs >正文

专业的东莞网站推广工程建设开工网站信息

专业的东莞网站推广,工程建设开工网站信息,wordpress 关键字 插件,广西网站建设在线一、引言 在当今的 Web 开发中,保护 API 不受未授权访问至关重要。JWT(JSON Web Token)是一种流行的用于身份验证的开放标准,它允许用户在客户端和服务器之间安全地传输信息。FastAPI 是一个现代、快速的 Web 框架,用…

一、引言

在当今的 Web 开发中,保护 API 不受未授权访问至关重要。JWT(JSON Web Token)是一种流行的用于身份验证的开放标准,它允许用户在客户端和服务器之间安全地传输信息。FastAPI 是一个现代、快速的 Web 框架,用于构建 API,它具有许多优秀特性,如自动文档生成功能和依赖注入系统。在本文中,我们将探讨如何在 FastAPI 中实现 JWT 身份验证。

二、什么是 JWT?

JWT 是一种紧凑、自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。每个令牌由三部分组成,它们之间用点(.)分隔:

  1. 头部(Header):包含令牌类型(通常是 JWT)和使用的签名算法,例如 HMAC SHA256 或 RSA。
  2. 载荷(Payload):包含声明,即关于实体(通常是用户)的某些信息,以及其他的额外信息。
  3. 签名(Signature):用于验证消息在传输过程中未被篡改。

三、为什么使用 JWT?

  • 无状态:服务器不需要在服务器端存储会话信息,减少了服务器的负载。
  • 可扩展:由于服务器不需要保存会话状态,因此更容易扩展到多个服务器。
  • 灵活性:可以在令牌中包含关于用户或会话的任何类型的信息。

四、在 FastAPI 中实现 JWT

1. 项目设置

首先确保安装了 FastAPI 和 Uvicorn。可以使用以下命令安装:

pip install fastapi uvicorn

然后安装 Python_jwt 和 pyjwt 库:

pip install python-jwt pyjwt

2. 导入必要的库

在代码中导入 FastAPI 和其他必要的库:

from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
import jwt
from jwt import PyJWTError
from datetime import datetime, timedelta
from typing import Optional
from pydantic import BaseModel

3. 配置 JWT 密钥和算法

SECRET_KEY = "your-secret-key"  # 在实际应用中使用更安全的方法生成和存储密钥
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

4. 创建用户模型和数据库模拟

fake_users_db = {"john": {"username": "john","password": "secret","email": "john@example.com",}
}class Token(BaseModel):access_token: strtoken_type: strclass TokenData(BaseModel):username: Optional[str] = None

5. 创建身份验证函数

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")def verify_password(plain_password, hashed_password):return plain_password == hashed_password  # 实际应用中使用更安全的哈希方法def get_user(db, username: str):if username in db:user_dict = db[username]return user_dictdef authenticate_user(fake_db, username: str, password: str):user = get_user(fake_db, username)if not user:return Falseif not verify_password(password, user['password']):return Falsereturn userdef create_access_token(data: dict, expires_delta: Optional[timedelta] = None):to_encode = data.copy()if expires_delta:expire = datetime.utcnow() + expires_deltaelse:expire = datetime.utcnow() + timedelta(minutes=15)to_encode.update({"exp": expire})encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)return encoded_jwt

6. 创建 API 路由

app = FastAPI()@app.post("/token", response_model=Token)
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):user = authenticate_user(fake_users_db, form_data.username, form_data.password)if not user:raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,detail="Incorrect username or password",headers={"WWW-Authenticate": "Bearer"},)access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)access_token = create_access_token(data={"sub": user['username']}, expires_delta=access_token_expires)return {"access_token": access_token, "token_type": "bearer"}async def get_current_user(token: str = Depends(oauth2_scheme)):credentials_exception = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,detail="Could not validate credentials",headers={"WWW-Authenticate": "Bearer"},)try:payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])username: str = payload.get("sub")if username is None:raise credentials_exceptiontoken_data = TokenData(username=username)except PyJWTError:raise credentials_exceptionuser = get_user(fake_users_db, username=token_data.username)if user is None:raise credentials_exceptionreturn user@app.get("/users/me")
async def read_users_me(current_user: dict = Depends(get_current_user)):return current_user

五、测试 API

启动应用:

uvicorn main:app --reload

打开浏览器访问 http://localhost:8000/docs,使用 Swagger UI 测试 API。通过 /token 端点获取访问令牌,然后使用该令牌访问 /users/me 端点。

六、总结

通过在 FastAPI 中实现 JWT 身份验证,可以为你的 API 提供一种安全且无状态的身份验证机制。这种方式适用于各种规模的应用,能够有效保护 API 不受未授权访问。在实际应用中,请确保使用安全的方法生成和存储密钥,并采用更健壮的密码哈希算法来提高安全性。

http://www.dtcms.com/wzjs/822904.html

相关文章:

  • 网站设计的优点免费做手机网站建设
  • 德州市建设小学网站免费正能量不良网站推荐
  • 做网站的工作量wordpress 迅搜
  • 昆明二级站seo整站优化排名全国甲级建筑设计院名单
  • 主机屋vps网站助手代运营公司排行榜
  • 医疗网站建设代理商网站没被百度收录
  • 找做网站公司乐陵市属于哪个市
  • 郑州网站建设联系方式本地网站开发公司
  • 品牌网站建设等高端服务网页制作网站创建
  • 笔记本销售网站开发的背景建模培训机构有哪些
  • 安徽网站建python网站开发前端
  • 给别人做网站在那里接单建筑工程电影网
  • 站点与网站有什么区别汕头网站建设科技有限公司
  • 锒川市住房和城乡建设局网站公告西宁网络公司网站制作
  • 阿里云服务起做网站wordpress企业建站教程 百度 下载
  • 做网站的软件m开头沈阳大十字街附近做网站公司
  • 有做国际网站生意吗ASP网站开发教程实验总结
  • 嘉兴中小企业网站制作网站引入优酷视频
  • 中建西部建设西南有限公司网站中国建设银行信用卡旅游卡服务网站
  • 网站制作外包wordpress注册美化
  • 专业定制网站制作公司开发一款app软件需要多少钱
  • 建站模板行情中国设计最好的网站
  • 中国建设银行官网站e路护航下载网站出现建设中
  • 网站制作 服务建筑设计大专有用吗
  • 深圳网站建设叶林门户网站的基本特征多选题
  • 网站建设和管理维护山东省建设工程电子信息网站
  • 织梦网站调节网站域名在哪个网站卖好
  • 做网站的前途合肥网站搜索优化
  • 做pc端网站行情海洋聚创抖音代运营
  • 东莞的网站建设公司锻件开发设计公司