首页
学习
活动
专区
工具
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发展。

    65010

    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 将会在更多项目中被广泛应用。

    20010

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

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

    5.2K30

    FastAPI框架诞生缘由(下)

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

    2.4K20

    (进阶篇)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(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.2K20

    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 ,以便在应用程序启动时使用。

    90410

    FastAPI(48)- 自定义响应之 HTMLResponse、PlainTextResponse

    背景 上一篇文章讲了通过 Response 自定义响应,但有一个缺点 如果直接返回一个 Response,数据不会自动转换,也不会显示在文档 这一节开始讲自定义响应 会讲解多个响应类型 JSONResponse... 查看 Swagger API 文档 Response Header 请求结果 源码 只是声明了下 media_type,其他都没变 返回自定义 Response 第二种方式 背景 上面的两个栗子是通过在路径操作装饰器...但这样写有个缺点,开头也说了直接返回 Response 缺点 不会记录在 OpenAPI ,比如不会记录 Content-type,并且不会在 Swagger API 文档显示 查看 Swagger...API 文档 Response Header 请求结果 添加 response_class 和 return Response 综合使用 上面的栗子讲了直接 return Response 缺点...=PlainTextResponse) async def main(): return "Hello World" 查看 Swagger API 文档 Response Header

    1.1K50

    FastAPI框架诞生缘由(上)

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

    2.3K10

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

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

    31210

    FastAPI(57)- 安全相关概念

    OAuth2 OAuth2 是一个规范,它定义了几种处理身份验证和授权方法 这是一个相当广泛规范,涵盖了几个复杂用例 它包括使用“第三方”进行身份验证方法 比如在抖音通过微信、QQ 登录,底层用就是...OpenAPI OpenAPI(以前称为 Swagger)是用于构建 API(现在是 Linux 基金会一部分)开放规范 FastAPI 基于 OpenAPI,这就是拥有多个自动交互式文档界面、代码生成等原因...OpenAPI 有一种方法可以定义多个安全“方案” 通过使用它们,可以利用所有这些基于标准工具,包括这些交互式文档系统 apikey 一个应用程序特定密钥,可以来自: query param header...基本身份验证 HTTP 摘要 oauth2 处理安全所有 OAuth2 方法(称为“流”) 其中一些流程适用于构建 OAuth 2.0 身份验证提供程序( Google、Facebook、Twitter...openIdConnect 有一种方法可以定义如何自动发现 OAuth2 身份验证数据 这种自动发现是 OpenID Connect 规范定义

    91610

    学习FastAPI一些体会

    如下图所示点击try out即可调试程序 1.2类型注解 使用 Pydantic 数据模型,我们可以轻松地定义 API 输入和输出结构,并确保数据完整性和一致性。...JWT 支持: JSON Web Tokens(JWT)是一种用于安全传输信息开放标准。FastAPI支持JWT,可以轻松集成JWT身份验证机制,用于在Web应用对用户进行安全认证和授权。...HTTPS 安全传输: FastAPI推荐在生产环境中使用HTTPS,以确保数据在传输过程安全性。FastAPI能够与ASGI服务器(uvicorn)一起使用,支持HTTPS配置。...通过在模型定义数据类型和规则,开发者可以确保输入和输出数据合法性,减少了潜在错误发生可能性。这种类型注解和数据验证组合为开发者提供了更加可靠和安全编码体验。...首先,FastAPI在自动生成文档方面的独特优势使其在API开发更为突出。通过集成Swagger UI和ReDoc,FastAPI能够自动生成交互式文档,为API可视化和测试提供了便捷平台。

    76610
    领券