FastAPI JWT Auth 项目教程

FastAPI JWT Auth 项目教程

fastapi-jwt-authFastAPI extension that provides JWT Auth support (secure, easy to use, and lightweight) 项目地址:https://gitcode.com/gh_mirrors/fa/fastapi-jwt-auth

1. 项目的目录结构及介绍

FastAPI JWT Auth 项目的目录结构如下:

fastapi-jwt-auth/
├── README.md
├── setup.py
├── fastapi_jwt_auth/
│   ├── __init__.py
│   ├── auth.py
│   ├── config.py
│   ├── exceptions.py
│   ├── utils.py
│   └── ...
├── tests/
│   ├── __init__.py
│   ├── test_auth.py
│   ├── test_config.py
│   └── ...
└── ...

目录结构介绍

  • README.md: 项目说明文档。
  • setup.py: 项目安装文件。
  • fastapi_jwt_auth/: 核心代码目录。
    • __init__.py: 模块初始化文件。
    • auth.py: JWT 认证相关功能实现。
    • config.py: 配置文件处理。
    • exceptions.py: 自定义异常处理。
    • utils.py: 工具函数。
  • tests/: 测试代码目录。
    • __init__.py: 测试模块初始化文件。
    • test_auth.py: 认证功能测试。
    • test_config.py: 配置功能测试。

2. 项目的启动文件介绍

项目的启动文件通常是 main.pyapp.py,但在 FastAPI JWT Auth 项目中,启动文件可能是一个示例文件,用于演示如何集成和使用 JWT 认证。

假设启动文件为 main.py,其内容可能如下:

from fastapi import FastAPI
from fastapi_jwt_auth import AuthJWT

app = FastAPI()

@app.get("/")
def index(authorize: AuthJWT = Depends()):
    authorize.jwt_required()
    return {"message": "Hello World"}

启动文件介绍

  • FastAPI 实例化:创建一个 FastAPI 应用实例。
  • AuthJWT 依赖注入:使用 Depends 注入 JWT 认证依赖。
  • 路由定义:定义一个简单的路由 /,并使用 JWT 认证。

3. 项目的配置文件介绍

FastAPI JWT Auth 项目的配置文件通常是一个 Python 模块,例如 config.py,其中包含 JWT 认证的相关配置。

假设配置文件为 config.py,其内容可能如下:

class Settings:
    authjwt_secret_key: str = "secret"
    authjwt_algorithm: str = "HS256"
    authjwt_access_token_expires: int = 3600
    authjwt_refresh_token_expires: int = 86400

配置文件介绍

  • authjwt_secret_key: JWT 密钥。
  • authjwt_algorithm: JWT 签名算法。
  • authjwt_access_token_expires: 访问令牌过期时间(秒)。
  • authjwt_refresh_token_expires: 刷新令牌过期时间(秒)。

通过以上配置,可以灵活地调整 JWT 认证的行为。


以上是 FastAPI JWT Auth 项目的基本教程,涵盖了项目的目录结构、启动文件和配置文件的介绍。希望对您有所帮助!

fastapi-jwt-authFastAPI extension that provides JWT Auth support (secure, easy to use, and lightweight) 项目地址:https://gitcode.com/gh_mirrors/fa/fastapi-jwt-auth

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FastAPI是一个用Python编写的现代Web框架,它提供了高性能和易用性的优点。JWT(JSON Web Token)是一种在网络应用中传递信息的加密方式,它使用JSON对象作为安全令牌。 在FastAPI中使用JWT,你需要先安装PyJWT(Python JWT库)。然后,你需要定义一个JWT密钥(secret key),用于对JWT进行签名和解密。你可以在FastAPI的应用程序中定义一个全局的密钥,或者在每个路由中定义不同的密钥。 接下来,你需要编写一个认证函数,它会在每个请求中验证JWT令牌。如果令牌验证成功,你可以将请求传递给下一个处理程序。否则,你可以返回一个HTTP 401 Unauthorized错误。 最后,你需要在每个需要进行身份验证的路由中添加一个装饰器。这个装饰器将会在路由处理程序之前运行认证函数。 下面是一个使用FastAPIJWT进行身份验证的示例: ```python from fastapi import FastAPI, Depends, HTTPException from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm import jwt from jwt import PyJWTError app = FastAPI() JWT_SECRET_KEY = "mysecretkey" ALGORITHM = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES = 30 oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token") def verify_token(token: str): try: payload = jwt.decode(token, JWT_SECRET_KEY, algorithms=[ALGORITHM]) username = payload.get("sub") if username is None: raise HTTPException(status_code=401, detail="Invalid authentication credentials") except PyJWTError: raise HTTPException(status_code=401, detail="Invalid authentication credentials") @app.post("/token") async def login(form_data: OAuth2PasswordRequestForm = Depends()): # Your authentication logic here access_token = jwt.encode({"sub": form_data.username}, JWT_SECRET_KEY, algorithm=ALGORITHM) return {"access_token": access_token, "token_type": "bearer"} @app.get("/protected") async def protected_route(token: str = Depends(oauth2_scheme)): verify_token(token) return {"message": "Hello World"} ``` 在这个示例中,我们定义了一个JWT_SECRET_KEY和一个ALGORITHM,用于对JWT进行签名和解密。我们还定义了一个ACCESS_TOKEN_EXPIRE_MINUTES,用于设置访问令牌的过期时间。 我们使用FastAPI的OAuth2PasswordBearer类定义了一个oauth2_scheme,用于获取请求中的JWT令牌。 我们编写了一个verify_token函数,它用于验证JWT令牌的有效性。如果令牌验证失败,我们将抛出一个HTTP 401 Unauthorized错误。 我们使用FastAPI的Depends装饰器来定义一个依赖项,它将会在每个需要进行身份验证的路由中运行。这个依赖项会调用oauth2_scheme来获取JWT令牌,并将其传递给verify_token函数进行验证。 最后,我们定义了一个/login路由,用于用户登录并生成JWT令牌。我们还定义了一个/protected路由,它需要进行身份验证才能访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明会泽Irene

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值