#c# #asp.net-core #model-view-controller #asp.net-identity
#c# #asp.net-ядро #модель-представление-контроллер #asp.net-идентификация
Вопрос:
У меня есть Asp.net Основное приложение с 2 областями, каждая область имеет свою собственную страницу входа в систему. Я использую этот код для перенаправления пользователя на страницу входа в систему :
services.AddAuthentication(opt => { opt.DefaultScheme = "AdminAuth";})
.AddCookie("UserAuth", opt => { opt.LoginPath = "/User/Login"; opt.AccessDeniedPath = "/User/AccessDenied"; })
.AddCookie("AdminAuth", opt => { opt.LoginPath = "/Identity/Account/Login"; opt.AccessDeniedPath = "/Admin/Dashboard/AccessDenied"; });
после отправки формы входа в систему пользователь успешно вошел в систему, но не перешел к контроллеру и не вернулся на страницу входа.
Я использую эти атрибуты для контроллеров :
для администратора :
[Authorize(Roles = "Admin", AuthenticationSchemes = "AdminAuth")]
для пользователей :
[Authorize(Roles = "User", AuthenticationSchemes = "UserAuth")]
и для входа в систему я использую этот код :
_signInManager.PasswordSignInAsync(model.Username, model.Password, false, lockoutOnFailure: false);
Комментарии:
1. Есть ли у каждой страницы входа собственные пользователи? Вероятно, будет проще разделить сайт на два приложения.
2. Я не могу разделить это веб-приложение на два веб-приложения.
3. Конечно, у вас есть 2 формы входа, но один список пользователей с ролями пользователя / администратора. Каждая форма входа может проверять соответствующую роль, добавлять утверждение пользователя и соответствовать политике аутентификации. То, что вы хотите разделить авторизацию, не означает, что вам нужна отдельная аутентификация.
Ответ №1:
Идентификатор инкапсулирует базовый метод аутентификации с использованием файлов cookie. Но identity не предоставляет настройки файлов cookie, соответствующие схеме.
Я предлагаю вам использовать аутентификацию с использованием файлов cookie и добавить файлы cookie в указанную схему. Или одна из компаний использует базовую аутентификацию с использованием файлов cookie. В то время как другой бизнес использует идентификацию.
Пожалуйста, не забудьте указать эти схемы при использовании HttpContext.SignInAsync("schema",claimsPrincipal)
. В противном случае он будет генерировать только файл cookie схемы по умолчанию, который вы настраиваете при запуске.
Это пример входа пользователя в систему.
public IActionResult login()
{
string username = "username";
string userpassword = "password";
var userClaim = new List<Claim>
{
new Claim(ClaimTypes.Name,username),
new Claim(ClaimTypes.Role,"User")
};
var personIdentity = new ClaimsIdentity(userClaim, "identitycard");
var principle = new ClaimsPrincipal(new[] { personIdentity });
HttpContext.SignInAsync("UserAuth", principle);
return Redirect("resource");
}
Затем в браузер будут записаны два файла cookie.
Комментарии:
1. На самом деле, я хочу использовать _signInManager. PasswordSignInAsync(модель. Имя пользователя, модель. Пароль, false, lockoutOnFailure: false); функция.
2. @MyPv90, Identity инкапсулировал базовую аутентификацию с использованием файлов cookie, поэтому вы можете использовать другой метод. Пожалуйста, обратитесь к этому ответу, который я обновил.
3. в вашем ответе, как я могу использовать пароль для входа в систему?
4. Если вы используете как идентификацию, так и аутентификацию с использованием файлов cookie. Логин в части идентификации изменять не нужно. Вам нужно только указать схему при входе в систему проверки подлинности с использованием файлов cookie. Я настоятельно рекомендую вам использовать базовую проверку подлинности с использованием файлов cookie. Потому что идентификация — это инкапсуляция аутентификации cookie. Схема не может быть указана в интерфейсе, который она предоставляет.