refactor(plugin_system): 移除路由级认证,引入端点级安全依赖

之前的插件路由认证机制通过在 `RouterInfo` 中设置 `auth_required` 标志,对整个路由组件统一应用API密钥验证。这种方式缺乏灵活性,无法对单个端点进行细粒度的安全控制。

本次重构移除了 `auth_required` 机制,转而引入一个可重用的 FastAPI 依赖项 `VerifiedDep`。插件开发者现在可以按需将其应用到需要保护的特定端点上,从而实现更灵活、更精确的访问控制。

`hello_world_plugin` 已更新,以演示新的认证方式。

BREAKING CHANGE: 移除了 `RouterInfo` 中的 `auth_required` 属性。所有依赖此属性进行认证的插件路由都需要更新,改为在需要保护的端点上使用 `VerifiedDep` 依赖项。
This commit is contained in:
minecraft1024a
2025-11-16 13:31:59 +08:00
committed by Windpicker-owo
parent c2e05a8257
commit 334df4d87f
5 changed files with 17 additions and 14 deletions

View File

@@ -390,7 +390,6 @@ class ComponentRegistry:
logger.info("插件HTTP端点功能已禁用跳过路由注册")
return True
try:
from src.common.security import get_api_key
from src.common.server import get_global_server
router_name = router_info.name
@@ -408,14 +407,10 @@ class ComponentRegistry:
# 5. 生成唯一的URL前缀
prefix = f"/plugins/{plugin_name}"
# 6. 根据需要应用安全依赖项
dependencies = []
if router_info.auth_required:
dependencies.append(Depends(get_api_key))
# 7. 注册路由并使用插件名作为API文档的分组标签
# 6. 注册路由并使用插件名作为API文档的分组标签
# 移除了dependencies参数,因为现在由每个端点自行决定是否需要验证
server.app.include_router(
plugin_router, prefix=prefix, tags=[plugin_name], dependencies=dependencies
plugin_router, prefix=prefix, tags=[plugin_name]
)
logger.debug(f"成功将插件 '{plugin_name}' 的路由组件 '{router_name}' 挂载到: {prefix}")
@@ -880,6 +875,7 @@ class ComponentRegistry:
def get_plugin_components(self, plugin_name: str) -> list["ComponentInfo"]:
"""获取插件的所有组件"""
plugin_info = self.get_plugin_info(plugin_name)
logger.info(plugin_info.components)
return plugin_info.components if plugin_info else []
def get_plugin_config(self, plugin_name: str) -> dict: