Поскольку вы используете ASP. NET Core Identity, для вас по умолчанию используется схема аутентификации cook ie. Это также то, откуда приходит /Identity/Account/Login
, поскольку именно по этому пути схема аутентификации cook ie перенаправляет вас, когда пользователь не может быть аутентифицирован.
Это также называется аутентификацией challenge и схема аутентификации cook ie также является схемой по умолчанию challenge . Проверка подлинности - это, по сути, то, что происходит, когда личность пользователя подвергается сомнению, и ему предлагается подтвердить подлинность. Для аутентификации на основе идентификации это означает, что они должны войти в систему, используя свои учетные данные Identity.
Таким образом, перенаправление на /Identity/Account/Login
является вызовом схемы аутентификации cook ie. Чтобы вызвать это из вашего промежуточного программного обеспечения, вам просто нужно вызвать context.ChallengeAsync()
.
AuthenticationProperties
, который вы передаете методу ChallengeAsync
, используется для настройки этой задачи. Передав RedirectUri
, вы указываете, куда должна быть перенаправлена структура аутентификации после , когда вызов был завершен; так что, в основном, после того, как пользователь вошел в систему.
Итак, установив RedirectUri
в качестве URL-адреса для входа, вы в основном говорите: «Войдите в систему, а затем перенаправьте на страницу входа, где вы снова войдете в систему» .
Вместо этого вы хотите попросить пользователя войти в систему, а затем перенаправить обратно туда, откуда он пришел или куда он на самом деле хотел go пройти. Самый простой способ сделать это - выбрать путь запроса:
await context.ChallengeAsync(new AuthenticationProperties
{
RedirectUri = context.Request.Path,
});
Обратите внимание, что если вы хотите получить доступ к пользовательской информации в вашем промежуточном программном обеспечении, вам необходимо убедиться, что промежуточное программное обеспечение для аутентификации работает до этого. Таким образом, вам придется переместить вызов UseAuthentication()
дальше вверх по конвейеру. В противном случае пользователь всегда не будет аутентифицирован.