VEU.WathBody/1-docs/4-modules/m08-admin-web/api_specs/01-auth.md

42 lines
2.3 KiB
Markdown
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.

# Спецификация 01: аутентификация владельца (AdminAuthService)
Источники: Ф-9 (🛡 только владелец), tech-req 4.2 (PBKDF2 100k,
префикс `pbkdf2$`), module_reqs разд. 2.
## 1. Формат хэша
`Admin.PasswordHash` = `pbkdf2$100000$<salt_b64>$<hash_b64>`:
PBKDF2-HMAC-SHA256, 100 000 итераций, соль 16 байт, вывод 32 байта,
salt/hash — base64. Генерация (владельцу; python):
```bash
python -c "import os,hashlib,base64;s=os.urandom(16);print('pbkdf2$100000$'+base64.b64encode(s).decode()+'$'+base64.b64encode(hashlib.pbkdf2_hmac('sha256',b'ПАРОЛЬ',s,100000)).decode())"
```
`AdminAuthService.HashPassword(password, salt?)` — тот же формат
(используется тестами).
## 2. Сессии
- `Login(login, password)`: сверка с `Admin.Login` (константное
сравнение) и `Admin.PasswordHash` → валидно → токен
`Base64Url(32 random bytes)`, словарь `token → expiresAt = UtcNow+8ч`;
невалидно → `null` (эндпоинт отдаёт 401, без деталей);
- `Validate(token)` → bool (просроченные удаляются лениво);
- `Logout(token)` — удаление;
- перезапуск сервера — словарь пуст (вход заново);
- `Admin.Login` пуст в конфиге → консоль отключена: login всегда 401
(serve-валидацию не ломает — ключи опциональны);
- 🛡2: токен/пароль/хэш не логируются и не возвращаются.
## 3. Эндпоинт и фильтр
`POST /api/admin/login` body `{"login":"...","password":"..."}` →
`200 {"token":"..."}` | `401 {"error":"unauthorized"}`. Rate: без
ограничений в v1 (консоль за reverse-proxy, вопрос развёртывания).
`AdminAuthFilter` (MVC-фильтр на контроллерах admin): заголовок
`Authorization: Bearer <token>`; нет/невалиден/просрочен → `401`
`{"error":"unauthorized"}`. Контур `/api/admin/*` не проходит
`ApiKeyMiddleware` (🛡1 — атлетские `X-Api-Key` там не действуют).