вход переехал на доверенный заголовок Authelia вместо собственного OIDC

- пришедшего называет заголовок Remote-User от прокси, и верят ему только с
  адреса из перечня trusted_proxies; своего входа у сервиса не осталось — ни
  корня /auth, ни кук, ни срока сессии, ни секрета клиента в конфиге и в базе
- учётная запись заводится первым обращением: EnsureUser в пакете хранилища,
  шаг схемы 202608220001 с колонкой provider_login и снятыми правилами users
- cmd/oidcstub заменён на cmd/devtools с подкомандой proxy; заодно закрыт
  унаследованный DL3066 — пользователь образа назван числом
This commit is contained in:
av
2026-08-22 20:24:22 +03:00
parent e4441f3c49
commit 7f33c957e5
63 changed files with 5257 additions and 2305 deletions
+19 -12
View File
@@ -41,18 +41,22 @@
### Кого пускают
Приём и опрос закрыты сессией OIDC. Что её выдаёт и чем она предъявляется —
Кто пришёл, сервис узнаёт из заголовка `Remote-User`, который ставит обратный
прокси, сходив к Authelia; своего входа у сервиса нет. Кому верить, задаёт
перечень доверенных адресов в секции `[auth]`. Подробности —
[docs/security.md](docs/security.md), «Что разграничивает доступ»; известные
прорехи образца конфига — [docs/conventions/config.md](docs/conventions/config.md).
Локально провайдера нет, и войти при выдуманных адресах нельзя — вместо него
поднимается заглушка:
Локально прокси нет, а браузер заголовков не ставит — на место контура встаёт
подставной прокси из оснастки:
```bash
go run ./cmd/oidcstub
go run ./cmd/devtools proxy
```
Значения `[auth]` под неё стоят строками в `config.example.toml`.
Приложение после этого открывают **по адресу прокси** — `http://localhost:9000`.
В перечне доверенных адресов при этом должен стоять петлевой; строки под это
стоят в `config.example.toml`.
## Деплой
@@ -68,12 +72,15 @@ inv pl -- transcriber
## HTTP API
Семь адресов приложения: `POST /api/audio` — приём записи, `GET /api/status/:id`
— готовность задачи, `GET /auth/login`, `GET /auth/callback` и
`POST /auth/logout` — вход через провайдера
([access](openspec/specs/access/spec.md)), `GET /metrics` — метрики Prometheus с
префиксом `transcriber_`, `GET /health` — проверка живости. Сверх них тем же
портом отдаётся собственная поверхность встроенного хранилища и панель `/_/` —
Адреса приложения живут под корнем `/app`: `POST /app/audiorecords` — приём
записи, `GET /app/audiorecords` — страница своих записей,
`GET /app/audiorecords/{id}` — карточка, `GET /app/audiorecords/{id}/text` —
текст названного вида, `GET /app/me` — кто пришёл, `GET /app/config` — пределы,
которые сервис объявляет приложению. Отдельными адресами стоят `GET /metrics` —
метрики Prometheus с префиксом `transcriber_` — и `GET /health` — проверка
живости. Своего входа у сервиса нет: кто пришёл, называет заголовок обратного
прокси ([access](openspec/specs/access/spec.md)). Сверх этого тем же портом
отдаётся собственная поверхность встроенного хранилища и панель `/_/` —
[docs/security.md](docs/security.md), «Из чего строятся пути и ключи».
Контракт приёма и опроса нормативен и живёт в
@@ -93,7 +100,7 @@ inv pl -- transcriber
transcriber/
├── cmd/
│ ├── transcriber/ # Точка входа сервиса: конфиг, миграции, сборка зависимостей, запуск
│ └── oidcstub/ # Подставной провайдер OIDC для локального входа
│ └── devtools/ # Оснастка разработчика: подставной прокси для локального входа
├── internal/
│ ├── entity/ # Модели: задача, файл, результат распознавания
│ ├── contract/ # Интерфейсы адаптеров и репозиториев, типы ошибок