Сервер идентификации 4, ASP.NET URL-адрес возврата базовой идентификации и регистрации

#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, сгенерированных во время попытки аутентификации в другом браузере».

Это тоже мое понимание.

Один из подходов к этой проблеме — корректно обработать ошибку на стороне клиента. Если возникает ошибка такого типа (ошибка корреляции), мы знаем, что что-то не так с аутентификацией, и мы перенаправляем на страницу входа на стороне клиента. (Возможно, недружелюбный пытается получить доступ, поэтому перенаправьте на страницу входа.)

С точки зрения пользователя, подтверждающего свою электронную почту в другом браузере, я думаю, что разумно перенаправить на страницу входа и попросить их войти в систему. Они регистрируются, подтверждают свой адрес электронной почты, а затем им предлагается войти в приложение, если это другой браузер.

Дайте мне знать, если вы что-то еще придумали!