4cd92aeb60
Симптом: после ~30 мин неактивности пользователь видит 403 на /admin/audit и /admin/users. Перелогин решает. Корень. automaticSilentRenew: true в oidcConfig должен обновлять access_token, но падает молча когда: - refresh_token истёк (Keycloak SSO Session Idle = 30 мин) - silent renew iframe заблокирован 3rd-party cookies - silentRenewError не подцеплен глобально В этих случаях user.expired=true, accessToken=null. Дальнейшие запросы идут БЕЗ Authorization header → backend с ORDINIS_AUTH_REQUIRED=false пропускает как anonymous → requireInternal() видит PUBLIC scope → 403 (не 401). 401-handler в interceptor'е не срабатывает (статус не тот) → юзер залипает. Fix. Новый useEffect в TokenSync watches auth.user?.expired. На transition в true: signinSilent (вдруг refresh ещё жив), на failure signinRedirect. Anti-loop ref предотвращает повторные попытки пока expired=true. Бонусом — за компанию с MR !267 (admin → RESTRICTED) — после v2.42.4 деплоя админ может работать сессией дольше 30 мин без 403'ов.
Ordinis Admin UI
React 19 + Vite 7 + TanStack Router + TanStack Query + Tailwind v4 + i18next.
Локально
cd ordinis-admin-ui
pnpm install
# .env.local: VITE_API_PROXY=http://localhost:8081 (port-forward read-api)
pnpm dev
Контракт API
GET /api/v1/dictionaries(read-api) — список справочниковGET /api/v1/{dictionaryName}/records(read-api) — записи с локализациейPOST /api/v1/dictionaries(writer) — создание справочника (TODO в UI)POST /api/v1/dictionaries/{name}/records(writer) — создание записи (TODO в UI)
Сборка / Docker
docker build -t repo.nstart.cloud/terravault/ordinis-admin-ui:dev .
docker run --rm -p 8088:80 repo.nstart.cloud/terravault/ordinis-admin-ui:dev
# → http://localhost:8088
В кластере nginx проксирует /api/v1/* в ordinis-read-api (GET) и
ordinis-app (POST/PUT/PATCH/DELETE).