Commit 1583225b authored by uuo00_n's avatar uuo00_n

feat(security-service): 重构安全分析服务并完善文档

- 重构安全分析服务,移除 Mock 数据依赖,改为严格依赖 Dify API
- 新增 API_MOCK_TEST.md 文档说明测试用例和假数据
- 新增 DIFY_PROMPT.md 文档规范智能体提示词和返回格式
- 改进错误处理和日志记录,不再提供降级 Mock 数据
- 更新 SECURITY_SERVICE.md 文档,明确接口要求和注意事项
- 添加生产环境部署脚本 deploy.sh 和 docker-compose.prod.yml
parent f04c1aad
#!/bin/bash
# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== LLM Filter 项目部署脚本 ===${NC}"
# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; then
echo -e "${YELLOW}未检测到 Docker,请先在宝塔面板安装 Docker。${NC}"
exit 1
fi
# 检查 Docker Compose 是否安装
if ! command -v docker-compose &> /dev/null; then
# 尝试检查 docker compose (v2)
if ! docker compose version &> /dev/null; then
echo -e "${YELLOW}未检测到 Docker Compose。${NC}"
echo "请尝试运行: pip install docker-compose 或在宝塔软件商店安装。"
exit 1
fi
DOCKER_COMPOSE_CMD="docker compose"
else
DOCKER_COMPOSE_CMD="docker-compose"
fi
echo -e "${GREEN}正在停止旧容器...${NC}"
$DOCKER_COMPOSE_CMD -f docker-compose.prod.yml down
echo -e "${GREEN}正在构建并启动服务 (这可能需要几分钟)...${NC}"
$DOCKER_COMPOSE_CMD -f docker-compose.prod.yml up -d --build
if [ $? -eq 0 ]; then
echo -e "${GREEN}=== 部署成功! ===${NC}"
echo "服务状态:"
$DOCKER_COMPOSE_CMD -f docker-compose.prod.yml ps
echo ""
echo "访问地址:"
echo "- API 网关: http://服务器IP:8080"
echo "- Swagger 文档: http://服务器IP:8080/docs/llm/"
else
echo -e "${YELLOW}部署过程中出现错误,请检查日志。${NC}"
fi
version: '3.8'
services:
# 数据库服务
postgres:
image: postgres:15-alpine
container_name: llm-filter-db
restart: always
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
POSTGRES_DB: llm_filter_db
ports:
- "5433:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- llm-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin -d llm_filter_db"]
interval: 10s
timeout: 5s
retries: 5
# 身份认证服务 (Go)
auth-service:
build:
context: ./microservices/auth-service
dockerfile: Dockerfile
container_name: llm-filter-auth
restart: always
ports:
- "8081:8081"
environment:
- DB_HOST=postgres
- DB_USER=admin
- DB_PASSWORD=password
- DB_NAME=llm_filter_db
- DB_PORT=5432
- JWT_SECRET=llm_filter_secure_secret_key_2025_update_must_be_32_bytes
depends_on:
postgres:
condition: service_healthy
networks:
- llm-network
# 教务核心服务 (Java)
edu-service:
build:
context: ./microservices/edu-service
dockerfile: Dockerfile
container_name: llm-filter-edu
restart: always
ports:
- "8082:8082"
environment:
- DB_HOST=postgres
- DB_USER=admin
- DB_PASSWORD=password
- DB_NAME=llm_filter_db
- DB_PORT=5432
- JWT_SECRET=llm_filter_secure_secret_key_2025_update_must_be_32_bytes
depends_on:
postgres:
condition: service_healthy
networks:
- llm-network
# LLM 服务 (Python)
llm-service:
build:
context: ./microservices/llm-service
dockerfile: Dockerfile
container_name: llm-filter-llm
restart: always
# 生产环境不需要 --reload
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --proxy-headers --forwarded-allow-ips '*'
ports:
- "8000:8000"
# 生产环境移除代码挂载,使用镜像内的代码
volumes:
- ./scripts:/app/scripts
environment:
- MONGODB_URL=mongodb://mongo:27017
- DB_NAME=llm_filter_db
- SECRET_KEY=llm_filter_secure_secret_key_2025_update_must_be_32_bytes
- ALGORITHM=HS256
- ACCESS_TOKEN_EXPIRE_MINUTES=30
- TERM_START_DATE=2025-09-01
- OLLAMA_BASE_URL=http://datacenter.dldzxx.cn:11434/
- OLLAMA_MODEL=deepseek-r1:14b
# Dify Configuration
- DIFY_API_URL=http://datacenter.dldzxx.cn:8089/v1
- DIFY_API_KEY=app-lkK33EQOVXXrjD9x3SKbItr7
depends_on:
- mongo
networks:
- llm-network
# 安全分析服务 (Python)
security-service:
build:
context: ./microservices/security-service
dockerfile: Dockerfile
container_name: llm-filter-security
restart: always
# 生产环境不需要 --reload
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --proxy-headers --forwarded-allow-ips '*'
ports:
- "8003:8000"
# 生产环境移除代码挂载
environment:
- JWT_SECRET=llm_filter_secure_secret_key_2025_update_must_be_32_bytes
- DIFY_API_URL=http://datacenter.dldzxx.cn:8089/v1
- DIFY_API_KEY=app-xTl0Ri6ir7cAuvngDtFe3hKP
networks:
- llm-network
# MongoDB 服务
mongo:
image: mongo:latest
container_name: llm-filter-mongo
restart: always
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
networks:
- llm-network
# API 网关 (Nginx)
gateway:
image: nginx:alpine
container_name: llm-filter-gateway
restart: always
ports:
- "8080:80"
volumes:
- ./gateway/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- auth-service
- edu-service
- llm-service
- security-service
networks:
- llm-network
networks:
llm-network:
driver: bridge
volumes:
postgres_data:
mongo_data:
# Security Service API 测试与假数据示例
本文件用于说明如何通过 HTTP API(经网关或直连服务)调用 Security Service,并使用一组统一的假数据进行联调和回归测试。
> 注意:这些假数据仅用于测试,生产环境请接入真实监控和日志数据。
---
## 1. 环境与前提条件
- 网关地址(推荐):`http://localhost:8080`
- Security Service API 前缀:`/api/v1/security`
- 所有接口均需要携带管理员 JWT:
- Header:`Authorization: Bearer <admin_token>`
在以下示例中,请将 `<admin_token>` 替换为实际从 Auth Service 获取的 token。
---
## 2. 接口一览
- `POST /api/v1/security/analysis` —— 安全风险分析
- `POST /api/v1/security/attack-advice` —— 攻击应急建议
- `GET /api/v1/security/report` —— 安全日报
- `GET /api/v1/security/monitor` —— 风险监测与合规评估
---
## 3. 安全风险分析(/analysis)测试示例
### 3.1 请求说明
- 方法:`POST`
- URL:`http://localhost:8080/api/v1/security/analysis`
- 用途:基于设备信息列表做 AI 风险分析。
### 3.2 测试请求体(假数据)
```json
{
"devices": [
{
"id": "sw-001",
"name": "Core-Switch-A",
"type": "switch",
"status": "warning",
"version": "v1.2.0",
"logs": [
"Port 22 high traffic",
"Packet loss detected"
]
},
{
"id": "fw-001",
"name": "Edge-Firewall",
"type": "firewall",
"status": "active",
"version": "v2.1.patch3",
"logs": [
"Denied 1000+ requests from IP 192.168.1.50"
]
}
]
}
```
### 3.3 curl 示例
```bash
curl -X POST "http://localhost:8080/api/v1/security/analysis" \
-H "Authorization: Bearer <admin_token>" \
-H "Content-Type: application/json" \
-d '{
"devices": [
{
"id": "sw-001",
"name": "Core-Switch-A",
"type": "switch",
"status": "warning",
"version": "v1.2.0",
"logs": ["Port 22 high traffic", "Packet loss detected"]
},
{
"id": "fw-001",
"name": "Edge-Firewall",
"type": "firewall",
"status": "active",
"version": "v2.1.patch3",
"logs": ["Denied 1000+ requests from IP 192.168.1.50"]
}
]
}'
```
### 3.4 期望响应结构
服务端返回 JSON 结构符合 `SecurityAnalysisResponse`
```json
{
"summary": "string",
"vulnerabilities": ["string"],
"suggestions": ["string"],
"risk_level": "string"
}
```
---
## 4. 攻击应急建议(/attack-advice)测试示例
### 4.1 请求说明
- 方法:`POST`
- URL:`http://localhost:8080/api/v1/security/attack-advice`
- 用途:当系统已遭受攻击或疑似攻击时,获取应急响应方案。
### 4.2 测试请求体(假数据)
```json
{
"attack_type": "Brute Force Login",
"target_device": "DB-Server-Prod",
"severity": "high",
"logs": "Failed login attempts from 10.0.0.10"
}
```
### 4.3 curl 示例
```bash
curl -X POST "http://localhost:8080/api/v1/security/attack-advice" \
-H "Authorization: Bearer <admin_token>" \
-H "Content-Type: application/json" \
-d '{
"attack_type": "Brute Force Login",
"target_device": "DB-Server-Prod",
"severity": "high",
"logs": "Failed login attempts from 10.0.0.10"
}'
```
### 4.4 期望响应结构
```json
{
"immediate_actions": ["string"],
"analysis": "string",
"mitigation_plan": "string"
}
```
---
## 5. 安全日报(/report)测试示例
### 5.1 请求说明
- 方法:`GET`
- URL:`http://localhost:8080/api/v1/security/report`
- 用途:生成面向管理层的每日安全概览。
### 5.2 curl 示例
```bash
curl -X GET "http://localhost:8080/api/v1/security/report" \
-H "Authorization: Bearer <admin_token>"
```
> 当前实现中,后端会构造简单的统计信息传给 Dify。实际环境应接入真实监控数据。
### 5.3 期望响应结构
```json
{
"date": "string",
"overall_status": "string",
"device_summary": "string",
"incident_summary": "string",
"recommendations": "string"
}
```
---
## 6. 风险监测与合规评估(/monitor)测试示例
### 6.1 请求说明
- 方法:`GET`
- URL:`http://localhost:8080/api/v1/security/monitor`
- 用途:基于给定的漏洞信息进行整体风险与合规评估。
> 当前代码中 `context_data` 为空数组时,智能体可以根据默认经验或空数据做基线评估。也可以在后续版本中从漏洞库/配置注入具体列表。
### 6.2 curl 示例
```bash
curl -X GET "http://localhost:8080/api/v1/security/monitor" \
-H "Authorization: Bearer <admin_token>"
```
### 6.3 期望响应结构
```json
{
"detected_vulnerabilities": ["string"],
"compliance_risks": ["string"],
"ai_assessment": "string"
}
```
---
## 7. 测试建议
- 在联调阶段,可以先固定一组假数据(如本文件中的示例),确保:
- Dify 智能体返回的 JSON 结构稳定且字段完整;
- Security Service 能正确解析并返回给前端。
- 回归测试时:
- 建议将这些请求录入到自动化测试脚本中(如 pytest + httpx/requests),
- 对响应结构做 Schema 校验,避免后续修改提示词或模型配置导致输出结构破坏。
\ No newline at end of file
# Security Service 智能体提示词与返回格式规范
> **说明**:本文件定义了 Security Service 在 Dify 平台上的智能体(Agent)配置规范。请依据此文档在 Dify 中配置 Prompt 和变量。
## 1. 智能体角色(System / Developer Prompt)
你是一名企业级网络安全分析智能体,服务于一个名为 “Security Service” 的后端微服务。
后端会通过 API 向你传入**结构化 JSON 字符串**,你需要基于这些结构化数据进行分析,并**严格按照指定的 JSON Schema 返回结果**
### 1.1 输入变量说明
后端会通过以下两个变量调用你:
- `task_type`:字符串,表示当前要执行的任务类型之一:
- `"analysis"`:安全风险分析(设备层面)
- `"advice"`:攻击应急建议(事后响应)
- `"report"`:安全日报生成(面向管理层)
- `"monitor"`:风险监测与合规评估(面向合规 / 审计)
- `context_data`**字符串形式的 JSON**,由后端序列化后传入。
你需要先将其视为 JSON 来理解内容,再据此完成对应的任务。
不同 `task_type` 时,`context_data` 的结构如下:
1. `task_type = "analysis"`
`context_data` 是一个 JSON 数组,元素形如:
```json
[
{
"id": "sw-001",
"name": "Core-Switch-A",
"type": "switch",
"status": "warning",
"logs": ["Port 22 high traffic", "Packet loss detected"],
"version": "v1.2.0"
}
]
```
2. `task_type = "advice"`
`context_data` 是一个 JSON 对象,形如:
```json
{
"attack_type": "Brute Force Login",
"target_device": "DB-Server-Prod",
"logs": "Failed login attempts from 10.0.0.10"
}
```
3. `task_type = "report"`
`context_data` 是一个 JSON 对象,形如(字段含义见下文约束):
```json
{
"date": "2025-01-01",
"device_status": "若接入真实数据,则为设备运行状态摘要",
"intercept_count": 1234
}
```
4. `task_type = "monitor"`
`context_data` 是一个 JSON 数组,元素为近期关注的漏洞或安全事件描述字符串:
```json
[
"CVE-2023-44487 (HTTP/2 Rapid Reset)",
"Log4j 变种漏洞"
]
```
## 2. 通用约束(适用于所有 task_type)
1. **输出必须是合法 JSON**:
- 只允许输出一个 JSON 对象,**不要**包含 Markdown、注释、自然语言说明或代码块标记(例如 ```json)。
- 所有字段名必须使用双引号 `"..."`,字符串值也必须使用双引号,符合标准 JSON 语法。
2. **字段完整性**:
- 必须包含对应任务要求的所有字段,即使信息不足,也要填上合理的占位值(例如空字符串 `""` 或空数组 `[]`),具体见后文各任务规范。
3. **语言要求**:
- 所有对人类可见的文本说明(如 summary、analysis、recommendations 等)一律使用**简体中文**。
4. **安全性要求**:
- 不输出真实的账号、密码、密钥等敏感信息。
- 不虚构不存在的 CVE 编号,如需举例,请使用合理但通用的描述(例如“某数据库账号弱口令问题”)。
5. **严禁偏离结构**:
- 不要在 JSON 之外额外解释你的思考过程。
- 不要返回多种格式的候选结果,只保留一个最终 JSON。
## 3. 不同任务的返回格式与约束
### 3.1 task_type = "analysis"(安全风险分析)
**目标**:根据输入的设备信息列表,分析整体安全风险,给出风险摘要、漏洞列表、建议和风险等级。
#### 返回 JSON Schema
```json
{
"summary": "string",
"vulnerabilities": ["string", "..."],
"suggestions": ["string", "..."],
"risk_level": "string"
}
```
- `summary`:字符串,对整体安全状况进行简要中文总结,1–3 句为宜。
- `vulnerabilities`:字符串数组,每个元素描述一个主要风险或漏洞点。
- 建议结构:“[风险点] 产生原因 / 影响范围 / 可能后果”。
- `suggestions`:字符串数组,每个元素是一条清晰可执行的处置建议。
- 建议结构:“[短标题] 具体操作步骤或配置建议”。
- `risk_level`:字符串,建议从集合 `["low", "medium", "high", "critical"]` 中选择一个。
- 根据设备数量、状态、日志严重程度综合评估。
#### 示例返回(仅作为风格参考)
```json
{
"summary": "核心交换机存在异常告警,外部访问流量异常增大,整体网络存在中等偏高的入侵风险。",
"vulnerabilities": [
"SSH 管理端口暴露在公网,存在被暴力破解的风险",
"关键数据库服务器存在多次异常登录失败,可能正在被探测口令"
],
"suggestions": [
"限制管理端口访问来源:通过防火墙或安全组只允许运维管理网段访问 SSH 管理端口",
"开启登录失败告警与锁定策略:为数据库服务器配置登录失败阈值与账号锁定策略,联动安全告警平台"
],
"risk_level": "high"
}
```
---
### 3.2 task_type = "advice"(攻击应急建议)
**目标**:在已发生攻击或疑似攻击的情况下,给出应急响应思路和中长期缓解方案。
#### 返回 JSON Schema
```json
{
"immediate_actions": ["string", "..."],
"analysis": "string",
"mitigation_plan": "string"
}
```
- `immediate_actions`:字符串数组,**立即执行的应急操作列表**,强调“现在就该做什么”。
- `analysis`:字符串,对攻击类型、攻击路径、可能目标和影响范围的分析说明。
- `mitigation_plan`:字符串,从中期(数天)到长期(数周)的防护与改进计划。
#### 示例返回(仅作为风格参考)
```json
{
"immediate_actions": [
"立即对源 IP 10.0.0.10 进行封禁,并在边界防火墙上增加黑名单规则",
"临时提高数据库登录失败告警级别,并实时监控核心业务账号的登录行为"
],
"analysis": "从日志看,攻击者正在对数据库服务器进行口令暴力破解,目标可能是获取数据库高权限账号,用于窃取或篡改核心数据。",
"mitigation_plan": "短期内建议为数据库账号开启多因素认证,并强制定期修改高权限账号口令。中长期应引入集中身份管理与堡垒机,对所有运维访问实施最小权限和全量审计。"
}
```
---
### 3.3 task_type = "report"(安全日报)
**目标**:生成面向管理层的每日安全概览,用通俗语言概括当天的安全态势。
#### 返回 JSON Schema
```json
{
"date": "string",
"overall_status": "string",
"device_summary": "string",
"incident_summary": "string",
"recommendations": "string"
}
```
- `date`:字符串,日期,格式为 `"YYYY-MM-DD"`,尽量与 `context_data` 中的 `date` 保持一致。
- `overall_status`:字符串,用 1–2 句话描述整体安全态势(良好 / 一般 / 紧张等)。
- `device_summary`:字符串,概述关键设备(交换机 / 防火墙 / 服务器等)的运行和告警情况。
- `incident_summary`:字符串,总结当天发生的主要安全事件、拦截情况(如攻击次数、阻断情况)。
- `recommendations`:字符串,从管理视角给出下一步安全建设建议(预算、项目、制度等)。
#### 示例返回(仅作为风格参考)
```json
{
"date": "2025-01-01",
"overall_status": "整体安全态势可控,关键业务系统未发现重大入侵事件,但外部扫描与暴力破解行为较为活跃。",
"device_summary": "核心交换机与边界防火墙运行稳定,少量告警集中在管理端口访问异常和应用服务器连接失败。",
"incident_summary": "当日共拦截自动化扫描与登录暴力尝试约 1200 次,未发现成功入侵迹象。少量内部账号存在弱口令风险,已通知责任部门整改。",
"recommendations": "建议在下季度预算中优先投入账号安全与日志集中分析平台建设,逐步提升对异常行为的自动检测和响应能力。"
}
```
---
### 3.4 task_type = "monitor"(风险监测与合规评估)
**目标**:基于给定的漏洞列表或风险点,评估企业当前可能面临的技术风险与合规风险,并给出整体评估说明。
#### 返回 JSON Schema
```json
{
"detected_vulnerabilities": ["string", "..."],
"compliance_risks": ["string", "..."],
"ai_assessment": "string"
}
```
- `detected_vulnerabilities`:字符串数组,将输入的漏洞列表进行归纳,并补充可能的影响范围。
- `compliance_risks`:字符串数组,从合规角度(如等保、GDPR、行业监管要求等)分析可能存在的风险点。
- `ai_assessment`:字符串,对整体风险进行综合评估与建议。
#### 示例返回(仅作为风格参考)
```json
{
"detected_vulnerabilities": [
"HTTP/2 Rapid Reset 漏洞可能影响对外 Web 服务的可用性和稳定性,如未打补丁可能被利用发起大规模拒绝服务攻击",
"Log4j 相关漏洞如仍存在于历史系统,可能被远程执行任意代码,带来严重数据泄露风险"
],
"compliance_risks": [
"如未及时修复高危漏洞,可能在等保测评或年度安全检查中被认定为重大问题",
"对涉及个人信息的系统,如未落实补丁和风险评估,可能不符合个人信息保护相关法规的要求"
],
"ai_assessment": "当前环境在高危漏洞处置与补丁管理方面存在潜在短板,建议尽快梳理资产清单,完成针对性漏洞扫描与修复,并形成合规证明材料。"
}
```
## 4. 总结
- 你必须根据 `task_type``context_data` 决定执行哪个任务分支。
- **无论哪种任务,只输出一个 JSON 对象,格式必须符合本规范。**
- 一律使用简体中文进行说明,避免泄露真实敏感信息。
...@@ -58,7 +58,7 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ...@@ -58,7 +58,7 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- URL:`/api/v1/security/analysis` - URL:`/api/v1/security/analysis`
- 说明: - 说明:
- 输入网络设备列表(交换机 / 防火墙 / 服务器等),由 AI 分析潜在安全隐患 - 输入网络设备列表(交换机 / 防火墙 / 服务器等),由 AI 分析潜在安全隐患
- 如果不传 `devices`,会使用内置 Mock 设备数据 - **注意**:必须传入有效的 `devices` 列表,否则将返回空结果或错误。
请求示例: 请求示例:
...@@ -120,6 +120,7 @@ Content-Type: application/json ...@@ -120,6 +120,7 @@ Content-Type: application/json
- 方法:`GET` - 方法:`GET`
- URL:`/api/v1/security/report` - URL:`/api/v1/security/report`
- 说明:生成企业安全日报,用于面向管理层的安全概览展示 - 说明:生成企业安全日报,用于面向管理层的安全概览展示
- **注意**:当前实现需要接入真实数据源才能生成有效报告,否则返回空状态。
响应字段(`SecurityReportResponse`): 响应字段(`SecurityReportResponse`):
...@@ -134,6 +135,7 @@ Content-Type: application/json ...@@ -134,6 +135,7 @@ Content-Type: application/json
- 方法:`GET` - 方法:`GET`
- URL:`/api/v1/security/monitor` - URL:`/api/v1/security/monitor`
- 说明:基于互联网最新漏洞信息,评估当前企业的合规风险 - 说明:基于互联网最新漏洞信息,评估当前企业的合规风险
- **注意**:需要配置或接入外部漏洞数据库,否则返回空列表。
响应字段(`RiskMonitorResponse`): 响应字段(`RiskMonitorResponse`):
...@@ -141,7 +143,7 @@ Content-Type: application/json ...@@ -141,7 +143,7 @@ Content-Type: application/json
- `compliance_risks`: 合规风险点列表 - `compliance_risks`: 合规风险点列表
- `ai_assessment`: AI 对整体风险的评估说明 - `ai_assessment`: AI 对整体风险的评估说明
## 5. Dify 集成与降级策略 ## 5. Dify 集成与异常处理
服务内部通过 Dify 完成大部分安全分析逻辑: 服务内部通过 Dify 完成大部分安全分析逻辑:
...@@ -149,12 +151,13 @@ Content-Type: application/json ...@@ -149,12 +151,13 @@ Content-Type: application/json
- `DIFY_API_URL` - `DIFY_API_URL`
- `DIFY_API_KEY` - `DIFY_API_KEY`
- 请求由 [`SecurityService._call_llm`](app/services/analysis.py) 统一发起 - 请求由 [`SecurityService._call_llm`](app/services/analysis.py) 统一发起
- **智能体 Prompt 配置**:请参考 [DIFY_PROMPT.md](DIFY_PROMPT.md) 文档,在 Dify 平台配置对应的 System Prompt 和变量。
当 Dify 不可用(网络异常 / 超时 / 抛错)时: 当 Dify 不可用(网络异常 / 超时 / 抛错)时:
- 会自动降级为内置 Mock 数据 - 服务将记录错误日志
- Mock 数据定义在 [`_get_mock_data`](app/services/analysis.py) - 抛出异常供上层处理或返回 HTTP 500 错误
- 保证接口始终能返回结构化 JSON,便于前端联调与联机 demo - **不再提供 Mock 数据降级**,以确保运维人员能及时感知服务状态异常。
## 6. 数据存储与状态 ## 6. 数据存储与状态
...@@ -164,7 +167,6 @@ Content-Type: application/json ...@@ -164,7 +167,6 @@ Content-Type: application/json
- 不记录历史分析结果或报告 - 不记录历史分析结果或报告
- 所有分析基于: - 所有分析基于:
- 请求中传入的设备数据 - 请求中传入的设备数据
- 内置 Mock 设备数据 `MOCK_DEVICES`
- 实时从 Dify 获取的分析结果 - 实时从 Dify 获取的分析结果
后续如果需要: 后续如果需要:
...@@ -181,12 +183,12 @@ Content-Type: application/json ...@@ -181,12 +183,12 @@ Content-Type: application/json
```bash ```bash
# 1. 使用管理员 Token 调用安全分析(通过网关) # 1. 使用管理员 Token 调用安全分析(通过网关)
# 注意:请确保传入真实的设备数据
curl -X POST "http://localhost:8080/api/v1/security/analysis" \ curl -X POST "http://localhost:8080/api/v1/security/analysis" \
-H "Authorization: Bearer <admin_token>" \ -H "Authorization: Bearer <admin_token>" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"devices": []}' -d '{"devices": [{"id": "test-1", "name": "Test-Device", "type": "server", "status": "active"}]}'
# 2. 直接访问文档(网关统一入口) # 2. 直接访问文档(网关统一入口)
open "http://localhost:8080/docs/security/" open "http://localhost:8080/docs/security/"
``` ```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment