Почему вы можете увидеть ошибку 404 при входе в приложение с интеграцией Logto
Вы когда-нибудь сталкивались с ошибкой «404 Not Found», когда пытались войти в приложение с интеграцией Logto? В этом блоге объясняется, почему это происходит и что вы можете сделать, чтобы этого избежать.
Предыстория
Вы когда-нибудь пытались войти в приложение, использующее Logto для аутентификации, и сталкивались с ошибкой «404 not found»? Сообщали ли ваши пользователи о такой же проблеме?

Такое может случиться, если вы напрямую заходите на страницу входа (например, https://your-app.com/sign-in
), минуя предусмотренный процесс входа через приложение.
Вот почему:
Важность OIDC-потока
Logto использует протокол OpenID Connect (OIDC) для безопасной аутентификации. Когда вы входите в обычном процессе приложения (например, обычно нажимая на кнопку входа в вашем приложении), приложение инициирует обмен данными с OIDC-сервером Logto. Этот обмен называется «запрос авторизации» и важен, потому что он сначала выполняет различные проверки вызывающей стороны, а затем устанавливает защищённую сессию между вашим браузером и сервером (которая управляется с помощью куки).
Проблема появляется, если пользователь напрямую переходит на страницу «/sign-in» — при этом он обходит внутреннюю логику приложения, которая запускает OIDC-запрос авторизации. В таком случае сервер не распознаёт ваш браузер как обладающий валидной сессией — и возникает ошибка 404.
Решение
Есть два основных способа избежать этой проблемы:
Всегда используйте кнопку входа в приложении
Вместо прямого перехода на страницу "/sign-in", следуйте предусмотренному процессу авторизации через приложение. Когда вы нажимаете «Войти» в приложении, запускается правильный OIDC-запрос и создаётся необходимая сессия.
Автоматически перенаправляйте пользователей
Если в вашем экземпляре Logto только одно приложение, вы можете реализовать логику, которая будет автоматически перехватывать попытки перехода пользователя на страницу "/sign-in" без валидной сессии и отправлять его обратно на главную страницу, где отображается кнопка входа.
Для этого Logto предлагает настройку «URL переадресации при неизвестной сессии». Если вы зададите этот URL, Logto автоматически будет перенаправлять пользователей на указанную страницу вместо отображения ошибки 404. Например, вы можете переадресовать их на главную вашего приложения или на настраиваемый экран входа. После перенаправления ваше клиентское приложение должно инициировать новый процесс входа.
Настроить это можно в Logto Console по адресу Logto Cloud > Sign-in experience > Sign-up and sign-in > Advanced options — просто введите fallback URL.
Например, в Logto Cloud это установлено на https://cloud.logto.io/
. После настройки пользователи, которые заходят на /sign-in
без валидной сессии, будут перенаправлены туда для повторного входа.
Дополнительные размышления о повышении удобства
Мы стараемся улучшить опыт пользователей, по крайней мере, добавив полезные сообщения на страницу "/unknown-session", где разъясняется причина ошибки 404 и что делать дальше, чтобы пользователь не оставался в замешательстве. Например, Logto поддерживает указание вашей поддержки по email и сайта на страницах ошибок входа. Пользователи, столкнувшиеся с ошибкой, увидят ваши контакты и смогут обратиться за помощью.
Мы также рассматриваем возможность реализации других безопасных мер, например, автоматической переадресации на «Sign-out redirect URI» (обычно главная страница приложения), если в текущем экземпляре Logto о пределено только одно приложение, или внесения дополнительных настроек для отображения кастомного сообщения в таком случае.
Заключение
Ошибка 404 not found (недействительная сессия) на странице "/sign-in" обычно возникает из-за прямого обращения к URL входа, который обходит стандартный процесс аутентификации с запуском запроса авторизации, а значит валидная сессия (управляется куки) не создаётся.
Понимая эту логику и её важность, вы сможете избежать ошибки и обеспечить плавный вход в ваше приложение с интеграцией Logto.
Пожалуйста, не стесняйтесь связаться с нами, если хотите поделиться своими идеями.