P0-1/P0-2: tenant-граница по sub + обязательная подпись JWT

validateJWT теперь возвращает sub; middleware сверяет sub с {namespace} из URL
(несовпадение → 403) — закрывает горизонтальный доступ к чужим namespace.
Вне AUTH_TEST_MODE подпись HS256 обязательна: без JWT_HMAC_SECRET middleware
отказывает (fail-closed, 500), а config.Load требует секрет на старте.
This commit is contained in:
Repinoid
2026-10-06 19:04:54 +03:00
parent f76383a2ef
commit 4afee5cdf9
2 changed files with 37 additions and 12 deletions
+5
View File
@@ -149,6 +149,11 @@ func Load() (*Config, error) {
if cfg.MQTTPassword == "" {
missing = append(missing, "MQTT_PASSWORD")
}
// Вне тестового режима JWT_HMAC_SECRET ОБЯЗАТЕЛЕН: без него подпись не
// проверяется и токен можно подделать (fail-closed на старте).
if !cfg.AuthTestMode && cfg.JwtHMACSecret == "" {
missing = append(missing, "JWT_HMAC_SECRET (или включите AUTH_TEST_MODE для тестов)")
}
if len(missing) > 0 {
return nil, fmt.Errorf("required env vars not set: %s", strings.Join(missing, ", "))
}