Обновления продукта Logto
Logto v1.40.0 приносит возможность выбора диапазона времени для аудиторских журналов, более насыщенные payload'ы webhook'ов членства в организациях, значительный прирост производительности для крупных организаций и несколько улучшений для self-hosted развертываний.
Logto v1.40.0 — это релиз, направленный на повышение стабильности платформы. Он делает работу с аудиторскими журналами удобной даже на больших объемах, сообщает, что именно изменилось в webhook'ах членства в организациях, ускоряет выполнение запросов по организациям на крупных арендаторах и устраняет ряд давно замеченных неудобств при self-hosted развертываниях. Также добавлены три новых коннектора. Вот что нового.
Аудиторские журналы с возможностью выбора диапазона времени
Аудиторские журналы наиболее полезны, когда что-то только что произошло — но раньше Console получала неограниченное окно событий, что приводило к замедлениям у арендаторов с очень большими объемами журналов.
В этом релизе на странице аудиторских журналов появился выбор диапазона времени, по умолчанию — последние 7 дней. Доступны предустановленные окна (Последний 1 час, Последние 24 часа, Последние 7 дней, Последние 30 дней) и произвольный диапазон дат, а для доступа к более старым журналам достаточно просто расширить окно (#8810).
Внутри платформа Management API получила параметры запроса start_time и end_time для GET /api/logs и GET /api/hooks/{id}/recent-logs (не включительно, в unix миллисекундах), так что теперь можно программно ограничивать диапазон журналов (#8806). Для самых крупных арендаторов появился новый параметр enableCap=true, который ограничивает подсчет на ~10 000 строк и возвращает заголовок Total-Number-Is-Capped: true, жертвуя точным числом ради ответа, который не вызовет statement_timeout; Console переключается на постраничный просмотр Prev/Next при достижении лимита (#8796, #8802). Поведение без параметра осталось прежним.
Webhook'и членства в организации теперь указывают, что изменилось
Webhook Organization.Membership.Updated раньше сообщал, что членство изменилось, но не что именно. Теперь он содержит явные поля изменений — addedUserIds / removedUserIds и addedApplicationIds / removedApplicationIds — для всех конечных точек членства, а также addedUserIds при акцепте приглашения и just-in-time провиженинге (по email-домену и enterprise SSO JIT) (#8840).
Это полностью расширяемое и неразрушающее обновление: пустые массивы пропускаются, а каждый массив ограничен 5000 записями для массовых операций (можно синхронизироваться по GET /organizations/:id/users или .../applications, если превышено). Полное описание — в документации по webhook'ам. Это изменение заменяет раннее комьюнити-предложение — спасибо @chiche84 (#8752).
Пока работали над сессиями, GET /api/my-account/sessions также получило флаг isCurrent для каждой сессии — UI управления сессиями теперь может отмечать строку "Это устройство" и не позволять завершать сессию самого пользователя (#8731).
Организации, которые остаются быстрыми при росте
Несколько изменений нацелены на арендаторов с очень крупными организациями:
GET /organizations/:id/usersтеперь агрегирует роли через подзапросLATERAL, поэтомуLIMITограничивает возвращаемых пользователей до выборки ролей — вместо материализации всего соединенияmembers × rolesна каждом постраничном запросе (#8826).- Два новых вторичных индекса ускоряют обратные выборки: один по
organization_user_relations (tenant_id, user_id), используется при каждом входе и в middleware членства (#8818), и второй поorganization_role_user_relations (tenant_id, organization_id, user_id), используется вgetUserScopesи для ролей по пользователю (#8819). PUT /organizations/:id/usersтеперь использует новый дельта-подход, записывая только изменившиеся строки, вместо перезаписи всех строк членства на каждом вызове — и при этом сохраняет роли у тех, кто остался после обновления (#8820).
Account Center и исправления входа
- Согласие на условиях при регистрации через вход. При политике "требовать согласие только при регистрации" теперь при попытке создания нового аккаунта через "войти" с несуществующим email или номером телефона пользователь получает просьбу согласиться с условиями до создания аккаунта — так же, как и в обычных регистрационных и соц/SSO сценариях (#8835).
- Первичная установка пароля. Пользователи без пароля, email или телефона теперь могут установить первичный пароль через Account API без записи о проверке (#8746).
- Тихая повторная аутентификация. При ошибке user-info — например, при устаревшем access token после смены пользователя в том же браузере — Account Center теперь автоматически повторно аутентифицируется с
prompt=noneвместо возврата на экран входа, спасибо @taka-guevara (#8785). - Более чистое истечение сессии и callback'и соцсетей. Истекшие сессии в Account Center перенаправляют без отображения ошибки ручного входа (#8830), callback для социального связывания теперь правильно читает
connectorId(#8758), а подпись для переключателя двухфакторной верификации стала яснее (#8792). - i18n. Исправлен перевод "Passkey" на китайский язык для MFA, спасибо @rotempasharel1 (#8870).
Новые и улучшенные коннекторы
В этом релизе добавлено три коннектора и улучшено несколько других — многие благодаря сообществу:
- MailJunky — коннектор email для транзакционных писем авторизации, предоставлен @devadarshh (#8638).
- SMSBao — SMS-коннектор для внутренней верификации по SMS, предоставлен @wintbiit (#8871).
- Сервис аутентификации Aliyun SMS — коннектор, предоставленный @CertStone (#8385).
- Aliyun Direct Mail теперь поддерживает настройку региона Direct Mail (#8892).
- WeCom — теперь загружает расширенные пользовательские данные благодаря дополнительным API-запросам, предоставлено @liyujun-dev (#8191).
- SMTP — теперь
authможет не указыватьuserиpass, чтобы релеевание по IP/VLAN работало без подстановки учётных данных (#8888). - Connector Kit ужесточена проверка email-брендинга по URL для предотвращения ложных срабатываний на точечных сокращениях, спасибо @aayushbaluni (#8747).
Для self-hosted пользователей
Несколько изменений специально для open-source развертываний:
Настройка админа без интернета. Команды
installиdb seedтеперь принимают флаг--dapc(алиас--disable-admin-pwned-password-check). Политика паролей для арендатора-администратора по умолчанию включает проверку по Have I Been Pwned, что приводит к вызовуapi.pwnedpasswords.comпри каждой попытке задания пароля администратора — и зависает при регистрации первого администратора, если сайт недоступен. Передача--dapcотключает проверку, так что регистрация администратора больше не зависит от внешней сети. (Спасибо @darcyYe, #8859)
Ключи подписи админа из БД. Теперь open-source развертывания читают ключи подписания арендатора-администратора напрямую из базы данных, убирая необходимость настраивать host/DNS для контейнера Logto, чтобы получать OIDC-конфигурацию администратора через внешний endpoint (#8869).
Требуется миграция. v1.40.0 содержит изменения в схеме БД (новые индексы связей организаций и дополнительные внутренние столбцы). После загрузки новой версии выполните обновление схемы БД перед запуском сервера. См. руководство по обновлению.
Начать использование
Готовы к обновлению? Ознакомьтесь с нашим руководством по обновлению для пошаговых инструкций.
Полный список изменений смотрите на странице релиза в GitHub.
Остались вопросы или есть обратная связь? Присоединяйтесь к нам в Discord или создайте issue на GitHub.

