схемы аутентификации не аутентифицируются - PullRequest
0 голосов
/ 29 марта 2019

У меня есть два входа, один для администратора и один для пользователя. Поместите [Authorize (Policy = "RequireAdministratorRole", AuthenticationSchemes = "AdminScheme")] действие в admin,

, когда администратор входит в системуперенаправляет на страницу входа снова, несмотря на то, что администратор уже вошел в систему.

Страница перенаправления

Вот кукис

чтоздесь неправильно, это AuthenticationSchemes ?

Действие контроллера:

[Authorize(Policy = "RequireAdministratorRole", AuthenticationSchemes = "AdminScheme")]
public IActionResult Index()
{
    return View();
}

Startup.cs:

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));


        services.AddIdentity<User, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();


        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie("PublicScheme", options =>
            {
                options.Cookie.IsEssential = true;
                options.LoginPath = "/Identity/Account/Login";
                options.LogoutPath = "/Identity/Account/Logout";
            })
            .AddCookie("AdminScheme", options =>
            {
                options.Cookie.IsEssential = true;
                options.LoginPath = "/Identity/Account/LoginAdmin";
                options.LogoutPath = "/Identity/Account/Logout";
            });

        services.AddAuthorization(options =>
        {
            options.AddPolicy("RequireAdministratorRole",
                policy =>
                {
                    policy.AddAuthenticationSchemes("AdminScheme");
                    policy.RequireRole("Admin");
                });
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

Страница входа в систему:

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");

        if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);

            if (result.Succeeded)
            {
                _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return Page();
            }
        }

        // If we got this far, something failed, redisplay form
        return Page();
    }

Я ожидаю аутентификации администратора с использованием "AdminScheme" и пользователя с использованием "PublicScheme"

...