• release

Обновления продукта Logto

Logto v1.40.0 приносит возможность выбора диапазона времени для аудиторских журналов, более насыщенные payload'ы webhook'ов членства в организациях, значительный прирост производительности для крупных организаций и несколько улучшений для self-hosted развертываний.

Yijun
Yijun
Developer

Хватит тратить недели на аутентификацию пользователей
Запускайте безопасные приложения быстрее с Logto. Интегрируйте аутентификацию пользователей за считанные минуты и сосредоточьтесь на вашем основном продукте.
Начать
Product screenshot

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.