#c# #identityserver4 #asp.net-core-identity #returnurl
#c# #identityserver4 #asp.net-core-identity #returnurl
Вопрос:
У меня есть приложение сервера идентификации с ASP.NET Основной интерфейс идентификации для управления входом в систему, регистрацией, ecc.
У меня есть несколько приложений MVC, которые полагаются на сервер идентификации для аутентификации.
Все работает правильно: когда я пытаюсь получить доступ к защищенной странице, я перенаправляюсь на страницу входа в систему, а после входа в систему я перенаправляюсь обратно на защищенную страницу, которая теперь доступна.
Единственная проблема заключается в том, что returnUrl, передаваемый на страницу входа, выглядит примерно так
/connect/authorize/callback?client_id=myClientIdamp;redirect_uri=https://localhost:44309/signin-oidcamp;response_type=codeamp;scope=openid profile email offline_accessamp;code_challenge=yyfbWuF...amp;x-client-SKU=ID_NETSTANDARD2_0amp;x-client-ver=5.5.0.0
Если я добавлю этот URL в свою ссылку для подтверждения регистрации по электронной почте, он будет работать, только если ссылка открыта в том же браузере, где я запустил запрос на аутентификацию.
Если ссылка для подтверждения электронной почты открыта в другом браузере, она подтвердит правильность учетной записи и входа в систему, но при перенаправлении на клиента она вызовет исключение:
Exception: Correlation failed.
Unknown location
Exception: An error was encountered while handling the remote login.
Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler<TOptions>.HandleRequestAsync()
Это связано с тем, что, я полагаю, в новом браузере нет файлов cookie, сгенерированных во время попытки аутентификации в другом браузере.
Итак, мой вопрос: есть ли какой-либо способ получить исходный URL защищенной страницы при перенаправлении на страницу входа в систему, чтобы я мог использовать его в своей ссылке для подтверждения электронной почты?
Этого должно быть достаточно, потому что, как только учетная запись будет подтверждена, я буду перенаправлен обратно на мою защищенную страницу, которая должна запустить новый запрос аутентификации на страницу входа, но, будучи уже зарегистрированной, это будет автоматическая аутентификация.
Ответ №1:
«Это потому, что, я полагаю, в новом браузере нет файлов cookie, сгенерированных во время попытки аутентификации в другом браузере».
Это тоже мое понимание.
Один из подходов к этой проблеме — корректно обработать ошибку на стороне клиента. Если возникает ошибка такого типа (ошибка корреляции), мы знаем, что что-то не так с аутентификацией, и мы перенаправляем на страницу входа на стороне клиента. (Возможно, недружелюбный пытается получить доступ, поэтому перенаправьте на страницу входа.)
С точки зрения пользователя, подтверждающего свою электронную почту в другом браузере, я думаю, что разумно перенаправить на страницу входа и попросить их войти в систему. Они регистрируются, подтверждают свой адрес электронной почты, а затем им предлагается войти в приложение, если это другой браузер.
Дайте мне знать, если вы что-то еще придумали!