# 《WaLiAPI - 本地 LLM API 网关》第2-1节:密钥管理与配额控制

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

欢迎来到 Part 2!从这一节开始,我们进入高级特性篇。首先要解决的是"访问控制"问题——为什么网关需要自己的一套密钥体系,而不是直接让下游用上游的 API Key?

# 一、本章诉求

  1. 理解网关密钥体系的设计动机
  2. 实现 sk-waliapi-* 格式密钥的生成
  3. 实现密钥的 CRUD Tauri 命令
  4. 实现配额限制与用量追踪
  5. 掌握"Model → DTO"的分层转换模式

# 二、为什么需要网关自己的密钥?

# 2.1 没有网关密钥的世界

如果下游应用直接使用上游 API Key:

ChatBox  ──持有 sk-openai-xxx──→ 直连 OpenAI
NextChat ──持有 sk-openai-xxx──→ 直连 OpenAI
WaLiCode ──持有 sk-openai-xxx──→ 直连 OpenAI
1
2
3

问题:

  • Key 分散:同一个上游 Key 散落在 N 个应用里,泄露面大
  • 无法管控:想停用某个应用的访问?只能换 Key,所有应用都得改
  • 无法计量:不知道每个应用各自消耗了多少 Token

# 2.2 有网关密钥的世界

ChatBox  ──sk-waliapi-aaa──┐
NextChat ──sk-waliapi-bbb──┼──→ WaLiAPI ──sk-openai-xxx──→ OpenAI
WaLiCode ──sk-waliapi-ccc──┘    (密钥映射 + 配额 + 审计)
1
2
3

每个下游应用持有独立的网关密钥,上游真实 Key 只存在网关本地:

  • 隔离:吊销某个网关密钥不影响其他应用
  • 计量:每个密钥独立的 quota_used 计数
  • 限额:quota_limit 限制单密钥的最大 Token 消耗
  • 审计:日志中的 api_key_name 让每个请求可追溯来源
  • 安全:上游 Key 永不出本地,下游应用拿到网关密钥也没用(只能过网关,且受配额约束)