Files
Migu2.0/MiGu.Server/appsettings.json
T
zhaowei.huangandCursor bc1d4b8b5c feat(server/ops): 运维动作真实下发内核、审计持久化与幂等去重
OpsController 由「假成功队列」改为经投影反射 API 真实下发 SimpleLite,按 appsettings
的 Ops:Dispatch 映射 opCode→kind:Method,并做白名单 + JWT ops claim 双重校验;
审计改用 OpsAuditStore 原子落盘(取代进程内队列,重启不丢),新增 IdempotencyKey 幂等去重;
ExtractNumericId 取首段数字避免 AGV-12-3 误合并。appsettings 同步加 Ops:Dispatch 说明与 sl-route 鉴权策略。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 16:09:29 +08:00

79 lines
2.3 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Yarp": "Information"
}
},
"AllowedHosts": "*",
"Cors": {
"Origins": [
"http://localhost:5173",
"http://127.0.0.1:5173"
]
},
"Jwt": {
"Secret": "REPLACE_ME",
"Issuer": "migu.server",
"Audience": "migu.client",
"LifetimeMinutes": 1440
},
"Internal": {
"Token": "REPLACE_ME"
},
"_comment_SimpleLite": "登录后拉起 SimpleLite;改路径请编辑下方 SimpleLite 节点。诊断: http://localhost:8080/api/health/simplelite",
"SimpleLite": {
"Enabled": true,
"ExecutablePath": "..\\..\\Simple\\SimpleLite\\bin\\Debug\\SimpleLite.exe",
"WorkingDirectory": "..\\..\\Simple\\SimpleLite\\bin\\Debug",
"Arguments": "",
"ReadinessTimeoutMs": 15000,
"ReadinessPollIntervalMs": 250,
"ProjectionPort": 8222,
"FollowParent": false
},
"Auth": {
"Users": {
"admin": { "Password": "admin" },
"ops": { "Password": "ops" }
}
},
"_comment_Ops": "运维操作真实下发映射(M4)。opCode → 'kind:Method'Method 必须是 SimpleLite 反射 [MethodMember] 的真实方法名(车辆 kind=car,见 Car.csOnlineCar/OfflineCar/DisableCar/EnableCar/Repair/Blown/Reset 等;任务 kind=mission)。运营白名单的 pause/resume/gohome/manualCharge 内核暂无一一对应方法——留空则仅记审计并向前端如实返回『未下发』,按现场内核能力填写后即真实生效。示例: 'ops.car.gohome': 'car:Reset'",
"Ops": {
"Dispatch": {
}
},
"ReverseProxy": {
"Routes": {
"sl-route": {
"ClusterId": "sl-cluster",
"AuthorizationPolicy": "AnyAuthed",
"Match": { "Path": "/api/sl/{**catch-all}" },
"Transforms": [
{ "PathRemovePrefix": "/api/sl" }
]
},
"vrender-route": {
"ClusterId": "vrender-cluster",
"Match": { "Path": "/vr/{**catch-all}" },
"Transforms": [
{ "PathRemovePrefix": "/vr" }
]
}
},
"Clusters": {
"sl-cluster": {
"Destinations": {
"sl1": { "Address": "http://127.0.0.1:8222/" }
}
},
"vrender-cluster": {
"Destinations": {
"vr1": { "Address": "http://127.0.0.1:8223/" }
}
}
}
}
}