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

fastAPI接口——设置API密钥令牌

FastAPI 中设置 API 密钥令牌(API Key)是一种常见的安全措施,可以确保只有拥有有效密钥的客户端才能调用 API。

以下代码为后端代码

from fastapi import FastAPI, Depends, HTTPException
from fastapi.security.api_key import APIKeyHeader
from starlette.status import HTTP_403_FORBIDDEN

app = FastAPI()

# 定义 API 密钥
API_KEY = "your_secret_api_key"

# 创建 APIKeyHeader 实例,用于从请求头中提取 X-API-Key 字段。auto_error=True 表示如果请求中没有提供 X-API-Key,则会自动抛出一个 422 Unprocessable Entity 错误。
# 接收到请求时被依赖注入(Depends为依赖注入)
api_key_header = APIKeyHeader(name="X-API-Key", auto_error=True)

# 这个函数是一个依赖项,它依赖于 api_key_header 来获取请求头中的 X-API-Key。然后,它会检查该密钥是否与预定义的 API_KEY 匹配。如果匹配,则返回该密钥;如果不匹配,则抛出一个 403 Forbidden 错误,表示身份验证失败。
def get_api_key(api_key: str = Depends(api_key_header)):
    if api_key == API_KEY:
        return api_key
    else:
        raise HTTPException(status_code=HTTP_403_FORBIDDEN, detail="Could not validate credentials")

# 这里使用了 Depends 来调用 get_api_key 依赖项。FastAPI 会在调用 protected_route 之前自动执行 get_api_key,并将其返回值(即验证成功的 API 密钥)作为参数传递给 protected_route。
@app.get("/protected")
async def protected_route(api_key: str = Depends(get_api_key)):
    return {"message": "This is a protected route"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

uvicorn main:app --host 0.0.0.0 --port 8000 --reload启动后,执行以下代码即可看到效果,当密钥不同时返回:Failed to connect to 127.0.0.1 port 777 after 0 ms: 连接被拒绝

# 命令行访问api
curl -H "X-API-Key: your_secret_api_key" http://127.0.0.1:8000/protected

or

# 编写python文件访问api
import requests

# 定义 API 密钥
API_KEY = "your_secret_api_key"

# 定义 API URL
URL = "http://127.0.0.1:8000/protected"

# 发送带有 API 密钥的请求
headers = {
    "X-API-Key": API_KEY
}

response = requests.get(URL, headers=headers)

# 打印响应状态码和内容
print(f"Status Code: {response.status_code}")
print(f"Response: {response.json()}")

http://www.kler.cn/a/442135.html

相关文章:

  • UllnnovationHub,一个开源的WPF控件库
  • Redis可视化工具--RedisDesktopManager的安装
  • riscv架构下linux4.15实现early打印
  • C#表达式和运算符
  • 单元测试与unittest框架
  • 深入理解 D3.js 力导向图:原理、调参与应用
  • 探索Starship:一款用Rust打造的高性能终端
  • [计算机网络]ARP协议的故事:小明找小红的奇妙旅程
  • 前端面试问题集合
  • leetcode 栈部分笔记
  • stm32 ota程序不能跳转
  • Node.js 文件系统
  • WPF系列一:窗口设置无边框
  • 某“银狐”样本清除思路
  • 记一次自定义类型处理器未生效的原因
  • 基于微信小程序的电影院订票选座系统ssm+论文源码调试讲解
  • 最大堆【东北大学oj数据结构9-2】C++
  • 开源AI呼入机器人、AI呼出机器人的优点
  • Docker 镜像源 阿里镜像源限制后其他镜像源
  • vue3+ts使用二维码功能
  • C++之回调函数
  • JMeter配置原件-计数器
  • Vite 系列课程|3.Vite 相较于 Webpack 的优势
  • asp.net repeater嵌套
  • java中枚举的使用
  • android studio方便快捷保存数据读取数据(SharedPreferences)