asp. net core 3.1 Identity - перенаправление для входа в систему после SignInAsyn c (), когда реферером является Stripe - PullRequest
0 голосов
/ 14 июля 2020

У нас проблема с приложением asp. net core 3.1 MVC. Приложение использует встроенную функцию идентификации asp. net. Приложение хорошо работает для существующих пользователей. Если вы выберете любой маршрут [Authorized], вы будете перенаправлены на страницу входа, как и ожидалось.

Однако, вместо того, чтобы регистрироваться в нашем приложении, для новых пользователей мы подключаем их через Stripe Checkout. После успешной оплаты Stripe перенаправляет на указанный маршрут c в нашем приложении /conversion/success/{sessionid}, где sessionid - это сеанс Stripe. Это действие помечено как [AllowAnonymous].

Затем мы извлекаем необходимые данные о клиенте из Stripe, создаем пользователя в нашем репозитории через UserManager<T>. Затем мы вызываем SignInManager<T>.SignInAsync(), чтобы войти в систему нового пользователя, прежде чем перенаправить нового пользователя на домашнюю страницу [Authorized].

Этот процесс отлично работает при локальном запуске на наших тестовых машинах. Кроме того, при запуске на нашем производственном сервере (Azure App Service) он также отлично работает, когда мы запускаем маршрут вручную через браузер.

Однако, когда мы фактически запускаем процесс через Stripe, завершаем платеж и пусть Stripe перенаправит клиента, мы получим странное поведение.

Маршрут преобразования достигнут, запись пользователя создана, процесс входа завершается, но после перенаправления на домашнюю страницу промежуточное ПО аутентификации берет на себя, говорит, что это не аутентифицирован и перенаправляется на страницу входа.

Чтобы еще больше усложнить ситуацию, если вы затем просто введете маршрут домашней страницы в браузере, пользователь фактически войдет в систему точно так, как ожидалось, и приложение работает отлично .

Использование Fiddler для перехвата вызовов и просмотра заголовков, et c. мы не можем понять, почему при поступлении из Stripe будет другое поведение, чем при прямом вводе. Мы даже пытались перенаправить с другого веб-сайта на наш процесс регистрации, и это тоже работает должным образом.

Есть идеи, почему мы наблюдаем такое поведение?

---- Обновление ---

Если вместо перенаправления на домашнюю страницу в конце процесса адаптации мы просто покажем простое представление с якорной ссылкой на домашнюю страницу, пользователь сможет go перейти на домашнюю страницу, как и ожидалось.

1 Ответ

1 голос
/ 14 июля 2020

Возможно ли, что вы визуализируете страницу до завершения аутентификации? Поскольку UserManager использует Cook ie для установления sh сеанса пользователя, аутентификация должна быть завершена до любых заголовков или тела ответа, чтобы заголовок Set-Cookie мог быть отправлен в ответ.

Исходя из того, что вы описали, это звучит так, как будто пользователь попадает на домашнюю страницу после перенаправления без , имеющего повар аутентификации ie. Я бы начал отладку с помощью вашего веб-инспектора с включенным «Сохранять журнал» и прохождения процесса Stripe Checkout. Затем проверьте заголовки, отправленные в браузер, когда вы попадаете на страницу перенаправления, и убедитесь, что установлена ​​функция аутентификации ie.

Между запросами к Stripe и SignInAsyn c кажется возможным, что может быть отсутствует await, поэтому перенаправление происходит до обновления контекста аутентификации. Трудно сказать больше, не видя своего кода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...