首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在fastapi api中定义多个api密钥的自定义安全?

在FastAPI中,可以通过自定义安全机制来定义多个API密钥。以下是一种实现方式:

  1. 导入所需的库和模块:
代码语言:txt
复制
from fastapi import FastAPI, HTTPException, Security
from fastapi.security.api_key import APIKeyQuery, APIKeyCookie, APIKeyHeader
from starlette.status import HTTP_403_FORBIDDEN
  1. 创建FastAPI应用程序实例:
代码语言:txt
复制
app = FastAPI()
  1. 定义多个API密钥:
代码语言:txt
复制
API_KEY_1 = "your_api_key_1"
API_KEY_2 = "your_api_key_2"
  1. 定义自定义安全机制:
代码语言:txt
复制
api_key_query = APIKeyQuery(name="api_key")
api_key_cookie = APIKeyCookie(name="api_key")
api_key_header = APIKeyHeader(name="api_key")
  1. 创建一个验证函数,用于验证API密钥:
代码语言:txt
复制
async def get_api_key(api_key_query: str = Security(api_key_query), 
                      api_key_cookie: str = Security(api_key_cookie), 
                      api_key_header: str = Security(api_key_header)):
    if api_key_query == API_KEY_1 or api_key_cookie == API_KEY_1 or api_key_header == API_KEY_1:
        return "API Key 1"
    elif api_key_query == API_KEY_2 or api_key_cookie == API_KEY_2 or api_key_header == API_KEY_2:
        return "API Key 2"
    else:
        raise HTTPException(status_code=HTTP_403_FORBIDDEN, detail="Invalid API key")
  1. 创建一个受保护的路由,使用get_api_key函数进行验证:
代码语言:txt
复制
@app.get("/protected_route")
async def protected_route(api_key: str = Depends(get_api_key)):
    return {"message": "Protected route accessed successfully"}

在上述代码中,我们使用APIKeyQueryAPIKeyCookieAPIKeyHeader分别定义了三种不同的API密钥验证方式。通过在路由函数中使用Depends(get_api_key),我们实现了对API密钥的验证。

请注意,上述示例中的API密钥仅作为演示目的。在实际应用中,建议将API密钥存储在安全的地方,如环境变量或专用的密钥管理服务中。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):提供无服务器计算能力,可快速部署和运行代码片段。产品介绍链接
  • API 网关:为后端服务提供统一的API出口和流量控制。产品介绍链接
  • 腾讯云密钥管理系统(KMS):用于存储和管理密钥,提供加密、解密和签名功能。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【译】如何在 Node.js 中创建安全的 GraphQL API

原文地址:How to Create a Secure Node.js GraphQL API 作者:Marcos 本文的目的是提供一份快速指南 -- 《如何快速在如何在 Node.js 中创建安全的...API 只在意服务端与客户端之间的通信的方式,而不会依赖于特定的技术栈。 怎么定义一个 API 是否良好?它可能会拥有可靠的、可维护的和可扩展的 API,以及可以为多种客户端和前端应用程序提供服务。...如前面所讲述的那样,查询 (query) 是客户端从 API 读取和操作数据的方式。你可以传递一个对象的类型,并且定义所希望返回的字段类型。...`)); 在上面的代码中,我们做了以下事情: 启动 Express 服务并监听 3000 端口 定义这个例子会使用到的 queries 和 mutations 定义 queries 和 mutations...请注意,本文中所提到所有标准和建议都不会是一成不变的。 这只是许多构建 GraphQL API 方法中的一种。

2.5K20

谷歌发布TensorBoard API,让你自定义机器学习中的可视化

安妮 编译自 Google Research Blog 量子位 出品 | 公众号 QbitAI 今天,谷歌发布了一系列TensorBoard API,开发者可在TensorBoard中添加自定义的可视化插件...,实现自定义可视化效果。...谷歌背后的目的何在?我们不妨一探究竟。 ? △ TensorBoard完全配置时的样子 由难到易 这事还得从头说起。...然而,在没有可重用的API时,TensorFlow团队外的开发人员添加新的可视化效果比较困难。因此,谷歌决定发布一套统一的API,让开发者能在TensorBoard中添加自定义的可视化插件。...硕士期间创建了一个API并命名为Beholder,Beholder能将训练模型时的数据(如梯度和卷积滤波器等)以视频的形式展示出来,量子位将demo视频搬运了过来: ?

1.3K40
  • Vue 3.0 中令人激动的新功能:Portals+新的自定义指令API

    第一篇:Vue 3.0 中令人激动的新功能:Composition API 第二篇:Vue 3.0 中令人激动的新功能:Fragment+Suspense+多个v-model 这是最后一篇了,文章很长,...Portals Portals是一种特殊的组件,目的是在当前组件之外渲染某些内容。这也是React中原生实现的功能之一。这是React文档中关于portals的说法。...新的自定义指令API 自定义指令API将在Vue 3中略有改变,只是为了更好地与组件生命周期保持一致。这个变化应该会让新用户更容易理解和学习,因为它现在更直观了。 这是目前的自定义指令API。...这个API的改变目前在这个RFC中讨论,这意味着它可能会在未来发生变化。 Psst!你可以在我们的课程中学习如何掌握自定义指令。...总结 除了Composition API是Vue 3中最大的新API之外,我们还可以发现很多小的改进。我们可以看到,Vue正在向着更好的开发者体验和更简单、更直观的API发展。

    65510

    FastAPI从入门到实战(0)——初识FastAPI

    本文主要介绍一下FastAPI是什么,多数内容摘自官网:https://fastapi.tiangolo.com/zh/ FastAPI是什么 FastAPI 是一个用于构建 API 的现代、快速...FastAPI特性 基于开放标准 用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。...所有的校验都由完善且强大的 Pydantic 处理。 安全性及身份验证 集成了安全性和身份认证。杜绝数据库或者数据模型的渗透风险。 OpenAPI 中定义的安全模式,包括: HTTP 基本认证。...API 密钥,在: 请求头。 查询参数。 Cookies, 等等。 加上来自 Starlette(包括 session cookie)的所有安全特性。...可扩展: Pydantic 允许定义自定义数据类型或者你可以用验证器装饰器对被装饰的模型上的方法扩展验证。 100% 测试覆盖率。

    3.7K20

    猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程

    摘要 作为一名专注于Python和人工智能开发的技术博主,猫头虎经常在开发过程中遇到各种挑战。最近,有粉丝问到如何高效地构建API,尤其是与机器学习模型集成的场景。...在本篇博客中,我们将详细介绍一个近年来崛起的Python库——FastAPI,它因其高性能和易用性受到开发者的喜爱。 FastAPI被认为是构建快速、现代Web APIs的理想选择。...FastAPI 是现代**Python Web**开发的利器,特别适合需要高性能的应用场景,如机器学习模型的在线部署。 ️ 2....A: FastAPI 支持中间件,您可以通过 @app.middleware("http") 装饰器来定义自定义中间件。...在本文中,我们通过多个例子详细展示了FastAPI的基本用法和高级应用。 未来展望 随着 API 需求的不断增长,FastAPI 将会在更多的项目中被广泛应用。

    33410

    Github 火热的 FastAPI 库,站在了这些知名库的肩膀上

    启发 FastAPI 地方: 拥有简单直观的API。 直接,直观地使用HTTP方法名称(操作)。 具有合理的默认值,功能强大的自定义。...启发 FastAPI 地方: 为API规范采用开放标准,而不是使用自定义架构。...它没有使用像第三方库(如Pydantic)提供数据验证,序列化和文档,它有自己的库。因此,这些数据类型定义将不太容易重用。 它需要更多详细的配置。...它在声明中使用了自定义类型,而不仅是 Python 的标准类型,但这仍然是巨大的进步。 它也是第一个生成自定义模式的框架,该自定义模式以 JSON 声明整个 API。...我从未在完整的项目中使用过它,因为它没有安全性集成,因此,我无法用基于 Flask-apispec 的全栈生成器替换我拥有的所有功能。我在项目积压中创建了添加该功能的请求。

    5.3K30

    【DeepSeek 私有化】数据安全无忧:手把手教你部署 DeepSeek 并构建私有 API

    摘要 本文旨在指导企业和个人开发者如何在私有服务器上部署 DeepSeek,并通过 Flask 或 FastAPI 封装 API,以避免云端依赖并确保数据安全。...环境准备 在开始之前,确保你的私有服务器满足以下条件: Python 3.7 或更高版本 深度学习框架(如 TensorFlow 或 PyTorch) DeepSeek 模型文件 Flask 或 FastAPI...Q: 如何提高 API 的性能? A: 可以考虑使用异步处理、模型并行化或硬件加速(如 GPU)来提高性能。...总结 通过本文的介绍,你应该能够在私有服务器上成功部署 DeepSeek 模型,并使用 Flask 或 FastAPI 封装 API。这种方法不仅提高了数据安全性,还减少了对云服务的依赖。...未来,我们可以探索更多的优化策略,如模型压缩、分布式部署等,以进一步提升私有部署的性能和可扩展性。

    1.2K32

    FastAPI框架诞生的缘由(下)

    它没有使用像第三方库(如Pydantic)提供数据验证,序列化和文档,它有自己的库。因此,这些数据类型定义将不太容易重用。 它需要更多详细的配置。...它在声明中使用了自定义类型,而不仅是 Python 的标准类型,但这仍然是巨大的进步。 它也是第一个生成自定义模式的框架,该自定义模式以 JSON 声明整个 API。...Hug 启发了 FastAPI 使用 Python 类型提示来声明参数,并自动生成定义 API 的模式。...我从未在完整的项目中使用过它,因为它没有安全性集成,因此,我无法用基于 Flask-apispec 的全栈生成器替换我拥有的所有功能。我在项目积压中创建了添加该功能的请求。...使用) 启发 FastAPI 地方 我认为用相同的 Python 类型声明多个内容(数据验证,序列化和文档),同时又提供了强大的编辑器支持,这是非常绝妙的主意。

    2.4K20

    《Indie Tools • 半月刊》第005期

    灵活性:Motion 支持多种动画效果和自定义选项,满足开发者的个性化需求。 使用场景 1. 网页应用:Motion 适用于需要动画效果的网页应用,能够为用户提供更好的体验。 2....简单易用:无需配置,直接嵌入到 Web 应用中。 2. 支持多种框架:可与 React、Solid、Vue、Svelte 等框架一起使用。 3. 自定义动画:提供了自定义动画的选项。 使用场景 1....Web 应用开发:为 Web 应用添加流畅的过渡效果。 2. 交互式设计:为交互式设计添加动画效果。 缺点 1. 有限的自定义选项。 2. 对动画精度要求较高的场景可能不适用。...可定制性:Gsap 提供了丰富的 API 和插件,允许开发者自定义动画效果和行为。 使用场景 1. 网站交互设计:Gsap 可用于创建吸引人的交互效果,例如鼠标悬停效果、点击动画等。 2....生态系统尚在发展:FastAPI 的生态系统尚在发展中,可能缺乏一些成熟框架的功能和支持。 Appwrite 总结 Appwrite 是一个开源平台,允许开发者在几分钟内构建整个后端并轻松扩展。

    3500

    FastAPI(64)- Settings and Environment Variables 配置项和环境变量

    背景 在许多情况下,应用程序可能需要一些外部设置或配置,例如密钥、数据库凭据、电子邮件服务凭据等。..."Awesome API" admin_email: str items_per_user: int = 50 settings = Settings() app = FastAPI...前言 在某些情况下,提供依赖项的 Settings 会有用,而不是让全局对象拥有可随处使用的 Settings 在测试期间会有用,因为使用自定义 Settings 覆盖依赖项非常容易 config.py...,也许在不同的环境中,将它们放在一个文件中,然后从文件中读取它们,就好像它们是环境变量一样 这些环境变量通常放在一个文件 .env 中,该文件称为“dotenv” tips 以点 (.)...开头的文件是类 Unix 系统(如 Linux 和 macOS)中的隐藏文件 但是 dotenv 文件实际上不必具有那个确切的文件名 Pydantic 支持使用外部库读取这类型的文件 安装第三方库 pip

    2.4K30

    FastAPI-API文档和自动化测试(三)

    自定义 API 文档虽然 FastAPI 可以自动生成 API 文档,但有时您可能需要自定义文档的某些部分。为此,FastAPI 提供了一种方式来扩展自动生成的文档。...您可以通过创建一个 OpenAPI 文档对象来扩展自动生成的文档。您可以在此对象上添加标签、安全定义、服务器等信息。此外,您还可以使用 FastAPI 提供的几个装饰器来自定义每个路由的操作。...下面是一个自定义 API 文档的示例:from fastapi import FastAPI, Body, Header, HTTPExceptionfrom fastapi.openapi.docs...在 custom_openapi 函数中,我们使用了 FastAPI 提供的 get_openapi 函数来生成自定义的 OpenAPI 文档。...我们还使用了 x-logo 扩展属性来指定一个自定义的徽标。最后,我们将自定义的 OpenAPI 文档保存在 app.openapi_schema 中,以便在应用程序启动时使用。

    93510

    (进阶篇)Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架

    数据库 在 FastAPI 中,我们一如既往的使用了 SQLAlchemy 初始化数据库文件: from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative...所以在数据库操作的时候,可以自己定义传入和返回的模型字段来做有效的限制,你只需要继承 pydantic 中的 BaseModel 基类即可,看起来是那么的简单合理。...异常处理 在各种 http资源 不存在或者访问异常的时候都需要有 http状态码 和 异常说明,例如, 404 Not Found 错误,Post请求出现的 422,服务端的 500 错误,所以如何在程序中合理的引发异常...自定义自己的异常处理代码 from fastapi import FastAPI, HTTPException from fastapi.exceptions import RequestValidationError...FastAPI 官方文档十分的庞大,有非常多的地方还没有普及和深入,比如 FastAPI 的安全加密,中间件的使用,应用部署等等。哈,来日方长 !!!

    2.6K21

    FastAPI 作为集大成者,它的灵感来自哪里?

    此外,它还有比较完善的官方文档,并且官方文档正被翻译成多种语言,如:西班牙语、葡萄牙语、中文。 快速入门 前提条件 FastAPI 需要 Python 3.6+。...Swagger / OpenAPI 为 API 规范采用开放标准,而不是使用自定义架构。...Marshmallow 使用代码定义 “schemas”,自动的提供数据类型和验证。 Webargs 自动验证传入的请求数据。 APISpec 支持 API 的开放标准 OpenAPI。...尽管在 FastAPI 中它是可选的,它主要用于设置 headers,cookie 和其它状态代码。 Molten 使用模型属性的“默认”值为数据类型定义额外的验证。...Hug 帮助启发了 FastAPI 使用 Python 类型提示来声明参数,并自动生成定义 API 的 schema。

    2.1K10

    FastAPI框架诞生的缘由(上)

    但是,FastAPI 从 Requests 中获得了很多启发。Requests 是一个与API(作为客户端)进行交互的库,而 FastAPI 是一个用于构建 API(作为服务器)的库。...它们或多或少地处于相反的末端,彼此互补。Requests 具有非常简单直观的设计,非常易于使用,并具有合理的默认值。但同时,它非常强大且可自定义。...启发 FastAPI 地方: 拥有简单直观的API。 直接,直观地使用HTTP方法名称(操作)。 具有合理的默认值,功能强大的自定义。...启发 FastAPI 地方: 为API规范采用开放标准,而不是使用自定义架构。...启发 FastAPI 地方: 使用代码来定义提供的数据类型和验证的 schema,验证都是自动化的。 Webargs API 框架需要的另一大功能点是解析从前端发送的请求数据。

    2.4K10

    Python Web 框架 FastAPI

    可以通过访问应用程序中的特定端点来访问此文档,这使得理解和测试 API 变得非常容易,而无需手动编写大量文档。Python 类型提示:FastAPI 的突出功能之一是它使用 Python 类型提示。...数据验证: FastAPI 使用 Pydantic 模型进行数据验证。可以使用 Pydantic 的架构和验证功能定义数据模型。...安全功能: FastAPI 包含各种开箱即用的安全功能,例如对 OAuth2、JWT(JSON Web 令牌)的支持以及请求数据的自动验证,以防止 SQL 注入和跨站点脚本 (XSS) 攻击等常见安全漏洞...这意味着您的 Web 应用程序可以处理大量请求而不会减慢速度。自动数据验证:借助 FastAPI,您可以使用 Python 类型提示来定义 API 请求和响应所需的数据结构。...FastAPI自动验证数据,减少由于错误输入而导致错误的机会。身份验证和授权:它提供了处理身份验证和授权的简单方法,无论是使用 OAuth2、JWT 令牌还是自定义方法。

    11710

    Python面试:FastAPI框架原理与实战

    类型提示与验证Pydantic模型:介绍Pydantic库在FastAPI中的应用,如何定义模型(BaseModel)进行数据验证与序列化。...类型提示验证:说明FastAPI如何利用类型提示自动进行请求数据验证,以及如何自定义验证器(validator)。...中间件(Middleware)与钩子(Hooks)中间件:解释中间件的作用,演示如何编写自定义中间件处理全局请求或响应。...请求生命周期事件:列举FastAPI中的请求生命周期事件(如on_startup, on_shutdown, dependencies),并举例说明其应用场景。...文档生成:充分利用FastAPI内置的交互式API文档(Swagger UI / ReDoc),确保在开发过程中及时更新文档,保持API文档与代码同步。

    42610
    领券