Python + FastAPI 实现 API Key 鉴权:生成、哈希存储、撤销与限流

用FastAPI构建API包装SaaS:鉴权、限流与计量计费实战 API与SaaS是软件交付领域的两个基础概念。API提供接口调用能力,而SaaS则强调按需订阅、按量付费的软件服务模式。将API包装成SaaS,核心并非简单的接口转发,而是需要构建多租户隔离、鉴权管理、限流控制与计量计费等平台级能力。这些模块让每一次调用都成为可度量、可追溯、可定价的商业单元,从而为开发者提供稳定的增值服务。在实际工程中,借助FastAPI的依赖注入与异步特性,可以高效实现API Key鉴权、内存级限流、上游请求转发及用量记录;结合Docker Compose,则能快速完成容器化部署。这种模 阅读详情

开发一个对外 API 时,我们通常需要回答几个问题:

  • 谁可以调用接口?
  • 如何识别调用方?
  • 某个密钥泄露后如何单独撤销?
  • 如何限制请求频率?
  • 数据库泄露后,如何避免密钥被直接使用?

API Key 是一种常见的调用凭证,但仅仅判断请求中“有没有 Key”并不够。一套相对完整的实现还需要考虑生成、存储、权限、撤销、限流和日志脱敏。

OWASP 建议受保护接口要求客户端携带 API Key,请求过快时返回 429 Too Many Requests,并支持撤销违规或泄露的密钥。API Key 也不应该出现在 URL 中,因为 URL 可能进入服务器日志、浏览器历史和监控系统。OWASP REST Security Cheat Sheet

一、安装依赖

本文使用 Python 3.10 及以上版本。

pip install fastapi uvicorn

创建文件:

api-key-demo/
└── main.py

二、API Key 应该如何生成?

不要使用用户名、时间戳或自增 ID 充当密钥:

# 不安全示例
api_key = f"key_{user_id}_{int(time.time())}"

这类 Key 容易预测。

Python 标准库提供了适合生成安全随机令牌的 secrets 模块:

import secrets


def generate_api_key() -> str:
    random_part = secrets.token_urlsafe(32)
    return f"sk_demo_{random_part}"

前缀 sk_demo_ 不负责提供安全性,它的作用是:

  • 帮助用户识别凭证类型;
  • 方便密钥扫描工具发现误提交;
  • 减少把其他 Token 当作 API Key 的情况。

真正的随机性来自 secrets.token_urlsafe(32)。

三、为什么不应该保存明文密钥?

如果数据库直接保存:

sk_demo_xxxxxxxxx

一旦数据库被读取,攻击者可以立即调用接口。

更合理的方案是:

  1. 创建密钥时只展示一次完整值;
  2. 数据库只保存不可逆摘要;
  3. 用户再次提交密钥时计算摘要;
  4. 使用摘要查找对应记录。

本文使用 HMAC-SHA256,并加入只保存在服务端环境变量中的 Pepper:

import hashlib
import hmac
import os


KEY_PEPPER = os.getenv(
    "API_KEY_PEPPER",
    "development-only-change-me"
)


def digest_api_key(api_key: str) -> str:
    return hmac.new(
        KEY_PEPPER.encode("utf-8"),
        api_key.encode("utf-8"),
        hashlib.sha256
    ).hexdigest()

生产环境必须设置一个足够随机的 API_KEY_PEPPER:

export API_KEY_PEPPER="替换为高强度随机值"

不要将真实 Pepper 提交到代码仓库。

四、定义密钥数据结构

为了方便演示,本文使用内存字典代替数据库:

from dataclasses import dataclass, field
from datetime import datetime, timezone


@dataclass
class APIKeyRecord:
    key_id: str
    key_digest: str
    key_prefix: str
    owner_id: str
    scopes: set[str] = field(default_factory=set)
    enabled: bool = True
    created_at: datetime = field(
        default_factory=lambda: datetime.now(timezone.utc)
    )
    last_used_at: datetime | None = None

创建存储容器:

api_keys: dict[str, APIKeyRecord] = {}

生产环境应换成 PostgreSQL、MySQL 等持久化数据库。

五、创建密钥

完整密钥只在创建时返回:

import secrets


def create_api_key(
    owner_id: str,
    scopes: set[str]
) -> tuple[str, APIKeyRecord]:
    plain_key = generate_api_key()
    key_digest = digest_api_key(plain_key)

    record = APIKeyRecord(
        key_id=f"key_{secrets.token_hex(8)}",
        key_digest=key_digest,
        key_prefix=plain_key[:16],
        owner_id=owner_id,
        scopes=scopes
    )

    api_keys[key_digest] = record

    return plain_key, record

key_prefix 只保存前面一小段,用于后台展示:

sk_demo_abcd1234...

它不能用于鉴权。

六、从 Authorization Header 读取密钥

推荐的请求形式:

Authorization: Bearer sk_demo_xxxxxxxxx

不要使用 URL 参数:

https://example.com/api?api_key=sk_demo_xxx

因为 URL 更容易进入:

  • 访问日志;
  • 浏览器历史;
  • 代理服务器日志;
  • 分析与监控平台;
  • Referer 信息。

使用 FastAPI 的 HTTPBearer:

from fastapi import Depends, HTTPException, status
from fastapi.security import (
    HTTPAuthorizationCredentials,
    HTTPBearer
)


bearer_scheme = HTTPBearer(auto_error=False)

实现鉴权依赖:

def authenticate_api_key(
    credentials: HTTPAuthorizationCredentials | None = Depends(
        bearer_scheme
    )
) -> APIKeyRecord:
    if credentials is None:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Missing API key"
        )

    plain_key = credentials.credentials
    key_digest = digest_api_key(plain_key)
    record = api_keys.get(key_digest)

    if record is None or not record.enabled:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid API key"
        )

    record.last_used_at = datetime.now(timezone.utc)

    return record

无论密钥不存在还是已停用,都返回相同错误,避免向调用者暴露过多内部状态。

七、添加权限范围

只有通过鉴权,并不意味着密钥可以调用所有接口。

例如可以定义:

models:read
chat:write
images:write
admin:write

创建权限检查函数:

def require_scope(required_scope: str):
    def checker(
        record: APIKeyRecord = Depends(authenticate_api_key)
    ) -> APIKeyRecord:
        if required_scope not in record.scopes:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail="Insufficient scope"
            )

        return record

    return checker

图片接口要求 images:write:

@app.post("/v1/images/generations")
def generate_image(
    record: APIKeyRecord = Depends(
        require_scope("images:write")
    )
):
    return {
        "message": "Task accepted",
        "owner_id": record.owner_id
    }

认证失败应该返回 401,已经认证但权限不足则返回 403。

八、实现简单限流

API Key 泄露后,攻击者可能高频调用接口。只有鉴权,没有限流,仍然可能产生大量资源消耗。

OWASP API Security Top 10 将不受限制的资源消耗列为重要风险,并建议限制每个客户端的调用频率、请求大小和执行时间。OWASP API Security Top 10

下面使用滑动窗口实现演示版限流:

import time
from collections import defaultdict, deque


RATE_LIMIT = 10
RATE_WINDOW_SECONDS = 60

request_times: dict[str, deque[float]] = defaultdict(deque)


def check_rate_limit(record: APIKeyRecord) -> None:
    now = time.monotonic()
    cutoff = now - RATE_WINDOW_SECONDS
    timestamps = request_times[record.key_id]

    while timestamps and timestamps[0] <= cutoff:
        timestamps.popleft()

    if len(timestamps) >= RATE_LIMIT:
        retry_after = max(
            1,
            int(RATE_WINDOW_SECONDS - (now - timestamps[0]))
        )

        raise HTTPException(
            status_code=status.HTTP_429_TOO_MANY_REQUESTS,
            detail="Rate limit exceeded",
            headers={
                "Retry-After": str(retry_after)
            }
        )

    timestamps.append(now)

将鉴权和限流组合起来:

def authenticated_with_limit(
    record: APIKeyRecord = Depends(authenticate_api_key)
) -> APIKeyRecord:
    check_rate_limit(record)
    return record

需要注意:内存限流只适用于单进程演示。

如果部署多个实例,每个实例都有独立计数,应该使用 Redis 或 API Gateway 进行集中限流。

九、撤销密钥

密钥泄露时不能要求停掉整个账号,应该允许只撤销单个 Key:

def revoke_api_key(key_id: str) -> bool:
    for record in api_keys.values():
        if record.key_id == key_id:
            record.enabled = False
            return True

    return False

生产环境还可以记录:

revoked_at
revoked_by
revoke_reason

撤销后,下一次请求立即返回 401。

十、完整可运行代码

import hashlib
import hmac
import os
import secrets
import time
from collections import defaultdict, deque
from dataclasses import dataclass, field
from datetime import datetime, timezone

from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import (
    HTTPAuthorizationCredentials,
    HTTPBearer
)


app = FastAPI(title="API Key Demo")

KEY_PEPPER = os.getenv(
    "API_KEY_PEPPER",
    "development-only-change-me"
)

RATE_LIMIT = 10
RATE_WINDOW_SECONDS = 60


@dataclass
class APIKeyRecord:
    key_id: str
    key_digest: str
    key_prefix: str
    owner_id: str
    scopes: set[str] = field(default_factory=set)
    enabled: bool = True
    created_at: datetime = field(
        default_factory=lambda: datetime.now(timezone.utc)
    )
    last_used_at: datetime | None = None


api_keys: dict[str, APIKeyRecord] = {}
request_times: dict[str, deque[float]] = defaultdict(deque)

bearer_scheme = HTTPBearer(auto_error=False)


def generate_api_key() -> str:
    return f"sk_demo_{secrets.token_urlsafe(32)}"


def digest_api_key(api_key: str) -> str:
    return hmac.new(
        KEY_PEPPER.encode("utf-8"),
        api_key.encode("utf-8"),
        hashlib.sha256
    ).hexdigest()


def create_api_key(
    owner_id: str,
    scopes: set[str]
) -> tuple[str, APIKeyRecord]:
    plain_key = generate_api_key()
    key_digest = digest_api_key(plain_key)

    record = APIKeyRecord(
        key_id=f"key_{secrets.token_hex(8)}",
        key_digest=key_digest,
        key_prefix=plain_key[:16],
        owner_id=owner_id,
        scopes=scopes
    )

    api_keys[key_digest] = record

    return plain_key, record


def authenticate_api_key(
    credentials: HTTPAuthorizationCredentials | None = Depends(
        bearer_scheme
    )
) -> APIKeyRecord:
    if credentials is None:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Missing API key"
        )

    key_digest = digest_api_key(credentials.credentials)
    record = api_keys.get(key_digest)

    if record is None or not record.enabled:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid API key"
        )

    record.last_used_at = datetime.now(timezone.utc)

    return record


def check_rate_limit(record: APIKeyRecord) -> None:
    now = time.monotonic()
    cutoff = now - RATE_WINDOW_SECONDS
    timestamps = request_times[record.key_id]

    while timestamps and timestamps[0] <= cutoff:
        timestamps.popleft()

    if len(timestamps) >= RATE_LIMIT:
        retry_after = max(
            1,
            int(RATE_WINDOW_SECONDS - (now - timestamps[0]))
        )

        raise HTTPException(
            status_code=status.HTTP_429_TOO_MANY_REQUESTS,
            detail="Rate limit exceeded",
            headers={
                "Retry-After": str(retry_after)
            }
        )

    timestamps.append(now)


def require_scope(required_scope: str):
    def checker(
        record: APIKeyRecord = Depends(authenticate_api_key)
    ) -> APIKeyRecord:
        check_rate_limit(record)

        if required_scope not in record.scopes:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail="Insufficient scope"
            )

        return record

    return checker


@app.post("/demo/keys")
def issue_demo_key():
    plain_key, record = create_api_key(
        owner_id="user_123",
        scopes={
            "models:read",
            "images:write"
        }
    )

    return {
        "api_key": plain_key,
        "key_id": record.key_id,
        "warning": "完整密钥只显示一次,请安全保存"
    }


@app.get("/v1/models")
def list_models(
    record: APIKeyRecord = Depends(
        require_scope("models:read")
    )
):
    return {
        "data": [
            {"id": "example-model"}
        ],
        "key_id": record.key_id
    }


@app.post("/v1/images/generations")
def generate_image(
    record: APIKeyRecord = Depends(
        require_scope("images:write")
    )
):
    return {
        "message": "Task accepted",
        "owner_id": record.owner_id
    }


@app.delete("/demo/keys/{key_id}")
def revoke_key(key_id: str):
    for record in api_keys.values():
        if record.key_id == key_id:
            record.enabled = False
            return {"revoked": True}

    raise HTTPException(
        status_code=404,
        detail="Key not found"
    )

启动:

export API_KEY_PEPPER="请替换为随机值"
uvicorn main:app --reload

打开接口文档:

http://127.0.0.1:8000/docs

先调用 /demo/keys 创建密钥,再点击 Swagger 页面右上角的 Authorize,填入密钥进行测试。

/demo/keys 在本文中只是为了方便演示。生产环境的密钥创建接口必须由登录用户或管理员权限保护。

十一、生产环境注意事项

  1. 不要在日志中记录完整 Authorization Header。
  2. 不要把 Key 放在前端网页、移动应用安装包或公开仓库中。
  3. 为每个使用场景创建独立 Key,不要多人共享一个 Key。
  4. 支持撤销、轮换、到期时间和权限范围。
  5. 对请求频率、并发量和消费金额分别设置限制。
  6. 配置异常消费告警。
  7. 数据库只保存摘要和可展示前缀。
  8. 限流应使用 Redis 或网关等共享存储。
  9. 高价值操作不能只依赖 API Key,还需要更严格的授权校验。
  10. 第三方接口调用应设置连接超时和总超时。
LLM应用开发实战:JWT Token认证与API成本管理全解析 在现代Web应用与API开发中,身份认证是保障系统安全的核心环节。JWT(JSON Web Token)作为一种无状态、可自包含的认证凭证,通过数字签名确保信息传输的完整性与来源可信,是实现分布式系统单点登录和API访问控制的行业标准技术。其技术价值在于解耦了认证服务器与资源服务器,提升了系统的扩展性与维护性。随着大型语言模型(LLM)API的广泛应用,开发者不仅需要管理用户身份Token,还需应对模型调用中作为计算成本单元的Token用量激增问题。本文将从工程实践出发,详解如何在Spring Boot与F 阅读详情

相关推荐

FastAPI登录实现(JWT)

FastAPI之JWT JWT(JSON Web Tokens) 一、依赖库安装 jwt pip install jwt==1.2.0 python-jose 用于生成和检验JWT令牌 pip install python-jose==3.2.0 passlib 用于处理哈希密码的包 支持许多安全哈希算法以及配合算法使用的实用程序 推荐的算法是 Bcrypt pip install passlib[Bcrypt]==1.7.4 二、哈希并校验密码 1、创建对象,进行哈希和校验密码 from p

Joker-desire的博客 8960

Python 登录接口token生成

Python 登录接口token生成 登录接口中token一般都是MD5加密规则生成的,MD5加密规则请参照开发给的接口技术文档; token加密规则如下: //先从接口对接负责人处拿到 【 API_SECRET 】 =&amp;amp;amp;amp;amp;amp;amp;gt; 接口密钥(一个含有数字、大小写字母的随机字符串) define(&amp;amp;amp;amp;amp;amp;quot;API_SECRET&amp;amp;amp;amp;amp;amp;

pengyaniuniu的博客 9602

FastAPI安全加固实战:四层防御体系与5个必改配置

API安全是现代Web应用的基石,其核心在于传输层防护、身份认证、细粒度授权和响应数据脱敏四大环节。FastAPI虽以开发效率见长,但默认配置存在HTTPS未强制、文档端点暴露、中间件顺序混乱、Pydantic字段宽松、数据库连接池隐患等典型风险。本文聚焦生产级安全落地,详解如何构建可验证、可审计的纵深防御链路:从可信代理IP校验与JWT三重验证(签名+时效+黑名单),到ABAC策略即代码与CSP安全头注入,并强制关闭/docs、重写异常处理器、禁用extra='ignore'等5项关键配置。适用于Pyth

weixin_30412167的博客 374

WiFi-DensePose 安全特性全解析:JWT 认证、滑动窗口限流与 CORS 加固实战

> 本文以仓库归档目录中 [archive/v1/docs/security-features.md](https://link.gitcode.com/i/5d14d31d8599304cf50eddc0977168c3) 为技术主体,对照其源码实现(`archive/v1/src/api/middleware/` 与 `archive/v1/src/config/`)进行逐项验证与展开,系统讲

gitblog_00736的博客 408

Codex auth.json本质与安全认证体系构建指南

API密钥(API Key)是调用大模型服务的核心身份凭证,其原理基于Bearer Token认证机制,依赖服务端JWT签名与状态管控。技术价值在于实现轻量、可撤销、作用域受限的访问控制,广泛应用于代码补全、AI编程助手等本地化LLM工具链。典型应用场景包括VS Code插件、CLI开发工具及私有部署的Codex类工具,但直接共享auth.json文件存在地理围栏、频次限流、权限失控等高危风险。本文深入解析auth.json的非标准约定本质,并基于零信任理念,提出本地Token中继代理与codex.yaml

weixin_34248705的博客 364

基于Hermes与Codex构建AI自动化编码工作流:从原理到实战

在实际开发中,我们经常需要处理一些重复性、流程化的编码任务,比如根据模板生成 CRUD 代码、批量修改配置文件、或者执行一系列复杂的构建和部署命令。手动操作不仅效率低下,而且容易出错。最近,一个结合了 Hermes 和 Codex 的自动化工作流在开发者社区中引起了讨论,其核心思路是利用智能体(Agent)来调度和执行代码生成任务,实现“赛博牛马”式的连续自动化工作。本文将深入解析 Hermes 与 Codex 的组合应用,从概念理解、环境搭建、核心配置到实战演示,带你构建一个能够长时间稳定运行的自动化编码

weixin_30785593的博客 392

Bug Bounty Platform(漏洞赏金平台)全解析:基于 FastAPI + React 19 的生产级漏洞报告与处置系统

本篇技术指南围绕 Cybersecurity-Projects 仓库中的 `PROJECTS/advanced/bug-bounty-platform` 展开,从 README 快速入门出发,系统讲解这套"可生产部署的企业级漏洞赏金平台"的能力定位、容器化启动方式、前后端技术栈,并结合仓库内 [learn 学习模块](https://link.gitcode.com/i/e3e5760370f16

gitblog_01112的博客 962

AI模型安全部署实践:从DeOldify看网络安全框架下的纵深防御

在人工智能技术快速发展的今天,模型安全已成为AI应用从实验室走向生产环境必须跨越的关键门槛。模型投毒、数据泄露、资源耗尽等安全风险,不仅威胁服务可用性,更可能引发严重的合规问题。理解并实施纵深防御策略,是保障AI服务机密性、完整性与可用性的核心。通过将Web应用防火墙、API网关、预处理服务等安全组件与AI推理流程有机结合,构建起从输入验证、访问控制到持续监控的多层防护体系,能够有效应对针对AI服务的各类攻击。本文以DeOldify图像着色模型为例,深入探讨了在网络安全框架下进行AI服务安全部署的完整方案与

weixin_33860553的博客 329

AI应用API安全实战:从认证授权到纵深防御体系构建

在当今的软件开发和AI应用构建中,API安全是保障系统稳定与数据隐私的核心基石。其基本原理在于通过认证与授权机制,确保只有合法身份的用户或服务能够访问特定资源,从而防止未授权访问和数据泄露。从技术价值看,健全的API安全体系不仅能保护敏感数据、抵御恶意攻击,还能有效控制资源消耗,避免因API滥用导致的高昂成本。在实际应用场景中,无论是智能客服、内容生成还是数据分析等AI应用,都面临着API调用链复杂、攻击面广的挑战。本文聚焦于AI应用场景,深入探讨如何结合OAuth 2.0、JWT等主流协议,构建从网关认证

cqbh2011的博客 450

向量存储实战指南:RAG系统中的语义检索核心架构

向量存储是支撑生成式AI实现精准语义检索的关键基础设施,其本质是将非结构化数据(文本、图像等)通过Embedding模型映射为高维向量,并利用近似最近邻(ANN)算法完成毫秒级相似性匹配。它并非传统数据库的替代品,而是弥补关键词搜索在语义理解上的根本缺陷——例如‘iPhone促销’与‘苹果手机降价’零关键词重合却语义高度一致。技术价值在于 bridging 模型能力与私有数据之间的鸿沟,使RAG系统具备可扩展、低延迟、高相关性的实时召回能力。典型应用场景包括企业知识库问答、智能客服、法律文书比对及电商个性化

dibeichan3033的博客 776

SafeLLMDeploy:为本地大模型部署构建多层安全防护网关

在本地部署大语言模型(LLM)时,安全防护是生产级应用不可忽视的基线。传统的模型部署方案往往聚焦于推理性能与易用性,而暴露在外的API端点可能面临提示词注入、拒绝服务攻击、模型窃取及数据泄露等多重风险。其核心原理在于构建一个独立的安全网关层,在用户请求到达模型推理服务前,实施输入验证、访问控制、速率限制及输出过滤等纵深防御策略。这一技术方案的价值在于,它以非侵入方式为现有Ollama、vLLM等主流部署工具提供了企业级安全增强,实现了安全与便利的平衡。具体应用时,通过配置API密钥认证、基于IP的速率限制、

android_mylove的专栏 335

AI应用安全实战:从API密钥管理到提示词注入防御的完整指南

在当今AI应用开发中,API集成已成为标准实践,但其背后的安全风险常被忽视。从技术原理看,AI服务调用本质是远程过程调用,涉及数据传输、身份验证和资源消耗,这构成了潜在的攻击面。其技术价值在于,健全的安全机制不仅能防止经济损失,更是保障服务可用性、数据隐私和合规性的基石。在实际应用场景中,无论是内容生成工具还是智能客服,开发者都需面对恶意调用、数据泄露和模型攻击等挑战。本文聚焦于AI应用安全的核心实践,深入探讨如何通过架构设计抵御提示词注入攻击,并系统化管理API密钥,为开发者提供从防线构筑到应急响应的全链

416

api-key-generator:使用 Python 的简单 API 密钥生成器

api-key-生成器 使用 Python 的简单 API 密钥生成器 开发环境 操作系统:Windows 8.1 64 位 工具: Python 2.7.9 MongoDB 3.0.2(从下载 64 位安装程序) pymongo ( pip install pymongo ) 参数解析 吉特 用法 您可以将此应用程序用作模块和命令行实用程序。 作为模块 import api_key_gen apikey = api_key_gen . APIKeyGenerator () key = apikey . generate () print key 作为命令行实用程序 运行以下命令寻求帮助 $ python api_key_gen.py -h or --help 创建池: $ python api_key_gen.py -s 100 -s 池大小,默认为 10

【纯白嫖】Windows下OpenSSL预编译库免编译集成:32/64位双版本直接上手

在Windows上从零编译OpenSSL,Perl、nmake、构建参数配齐往往要耗掉大半天。这套Windows OpenSSL预编译库(OpenSSL 1.1 for Windows,32位+64位)把整套编译环节直接省掉。 ## OpenSSL 1.1预编译库包含什么 该项目基于OpenSSL 1.1.0h版本打包,提供Win64OpenSSL-1_1_0h.exe与Win32OpenSS

gitblog_01099的博客 443

Windows下用Docker快速搭建SearXNG私有搜索引擎(附Dify集成配置)

本文详细介绍了在Windows环境下使用Docker快速搭建SearXNG私有搜索引擎的完整流程,包括环境准备、容器化部署、安全配置优化以及与Dify平台的深度集成方法。通过分步指导和实用配置示例,帮助开发者构建兼具隐私保护和AI增强能力的本地化搜索解决方案,特别适合需要定制化搜索服务的应用场景。

weixin_30300225的博客 336

省三医院新门诊大楼网络安全建设项目实施方案

为了响应国家建设数字医疗,构建医联网、医共体的号召,新门诊大楼现有计算机网络,实现各门诊室、药房、医学影像科室及后勤科室的终端数据互通。在互联网出口以三层模式部署两台防火墙,作为连接公网的出口设备;出于等保合规和自身业务安全的考虑,现需要该网络上通过网络安全设备实现安全建设。公网出口防火墙,配置攻击防御策略,防御互联网上的病毒进入内网。公网出口防火墙配置攻击防御策略,防御外网对内网的入侵行为。服务器取得边界防火墙,配置攻击防御策略,入侵防御策略。公网出口防火墙配置入侵防御策略,防御外网对内网发起的D。

m0_63645854的博客 2015

从OpenAI TAC事件看API权限管理:RBAC模型与韧性架构设计

访问控制是软件安全与系统稳定的基石,其核心在于确保正确的实体在合适的条件下访问特定资源。其基本原理通常围绕认证(验证身份)与授权(验证权限)两大支柱展开。在技术实现上,基于角色的访问控制(RBAC)模型因其清晰的角色-权限映射和高效的管理能力,成为构建现代API权限系统的首选方案,它能有效支撑细粒度的权限分配与回收。这一技术的核心价值在于,它不仅是满足安全合规要求的关键,更是保障业务连续性和应对上游服务变更风险的第一道防线。尤其在当前广泛集成第三方AI服务(如OpenAI API)的应用场景中,一个健壮的权

weixin_30520015的博客 263

86 arduino 电机yl_(八)arduino入门:直流电机控制

一、本节介绍在本实验中,您将学习如何使用驱动芯片L293D和SunFounder Uno板控制小型直流(DC)电机的方向和速度。为了使初学者更容易,我们将让直流电机左右旋转,自动加速和减速。二、材料准备1 *小型直流电机1 * L293D1 * Arduino Uno板1 *面包板1 * USB数据线杜邦线三、原理讲解L293D这是一个非常实用的芯片,可以独立控制两台直流电机。在这个实验中,只有一...

weixin_29163857的博客 3568

超全AI应用开发面试知识点(持续更新)

本文是一份全面的技术面试准备指南,涵盖了Python开发、C/C++与数据结构、Linux与操作系统、计算机网络与API设计、FastAPI、Redis、MySQL、AI Agent与大模型应用、多模态与视频生成、软件工程与系统设计、RAG与知识库、部署与工程化等多个技术领域的高频考点。指南不仅包含基础知识点解析,还深入探讨了实际项目经验、问题排查方法和技术方案设计,特别强调了AI应用开发中的工程化落地和大模型应用的稳定性处理。此外,还提供了实习经历与简历技能点追问、项目深度剖析、自我介绍技巧以及常见场景题

2401_85054853的博客 446

hi3519dv500 os04a10输入调试

因该sensor接在soc端的iic6,在驱动中(Hi3519DV500_SDK_V2.0.1.1\smp\a55_linux\source\mpp\cbb\isp\user\sensor\hi3519dv500\omnivision_os04a10\os04a10_sensor_ctl.c)注意总线的选择。mem_process_isolation=1 改为 mem_process_isolation=0。2、OT_MIPI_SET_HS_MODE配置为LANE_DIVIDE_MODE_1。

linus 3172

Odoo 集成ReportBro报表设计器支持13,14,15,16,17,18,19

Odoo 集成ReportBro零代码报表设计器,ReportBro设计器 一个用于创建PDF和XLSX报告模板的javascript插件。

zxltwins的博客 3378

从零到一构建情感疗愈应用:暖屿 (Warm Isle) 全栈技术架构深度解析

摘要 《暖屿技术实现讲解文档》详细介绍了情感疗愈应用暖屿的全栈技术架构。项目基于FastAPI+Vue3前后端分离架构,采用Docker容器化部署,核心功能包含情绪管理、AI陪伴等。文档系统讲解了后端基础设施(配置管理、依赖注入)、业务逻辑、实时通信等设计,以及前端Vue3的状态管理、组件化实践。关键技术包括异步架构、AI集成、支付系统等,并涵盖测试、代码规范及扩展建议。目标读者为开发者、技术学习者和项目维护者,提供了现代Web应用的完整技术实现参考。

2402_83239589的博客 1642

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

FreeGPT-WebUI终极安全审计:10大风险点与纵深防御实战指南

在构建和部署AI应用时,Web应用安全是保障服务稳定与数据隐私的核心基石。其原理在于通过多层防护机制,在用户请求到后端服务的完整链路上建立检查点,防止未授权访问和数据泄露。对于连接用户与大型语言模型的Web用户界面(WebUI),安全防护的技术价值尤为突出,它直接关系到API密钥、用户隐私数据及计算资源的安全。在实际应用场景中,一个存在漏洞的WebUI可能成为数据泄露管道或资源滥用帮凶。本文聚焦于FreeGPT-WebUI的终极安全审计,系统剖析了包括**API密钥泄露**、**提示词注入**在内的十大关键

weixin_30887919的博客 420

在 SAP Fiori 里玩转 Manage Views:把过滤器与列表布局固化成你的默认工作台

本文介绍了SAP Fiori应用中"Manage Views"功能的核心价值和使用方法。该功能允许用户保存和复用个性化界面设置,包括筛选条件、列布局等,将重复操作简化为一次性配置。文章从技术实现、用户操作和治理建议三个维度展开: 功能本质:View存储的是界面状态而非业务模型,是提升个人生产力的工具 核心价值:固化高频操作,支持默认视图设置,实现"开箱即用"的工作状态 操作指南:详细说明了收藏、重命名、设为默认、自动应用等关键功能 治理建议:区分标准视图、个人视图和公

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 128

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5771
上一篇: Python 实现异步图片生成 API:任务提交、状态轮询与结果下载
下一篇: Python 实现模型 API 成本统计:Token 计费、SQLite 账本与预算告警
Kevin_ssr
博客等级 码龄2年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值