Страница множественного входа с ядром идентификации и Asp.net Ядро 3.1

#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. Схема не может быть указана в интерфейсе, который она предоставляет.