Аутентификация с помощью cookie-файлов ASP.NET Core Razor Pages перенаправляет на страницу входа после успешного входа - PullRequest
0 голосов
/ 19 ноября 2018

Я следовал за статьей Использовать проверку подлинности с использованием куки без ASP.NET Core Identity и загрузил образец из 2.x / Cookies .

Запустил образец в VS 2017. Открыл страницу «Контакты», как указано в документации и из кода (который он защищен), вошел в систему с использованием учетных данных, аутентифицированных в коде, с помощью простого сравнения строк, он войдет в систему при отладке Это означает, что он добавляет пользователя-участника со своими претензиями, но перенаправляет обратно на страницу входа, а не на страницу контактов.

ConfigureServices:

        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
             options.Conventions.AuthorizePage("/Contact");
        })
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        #region snippet1   
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options => options.ExpireTimeSpan = new System.TimeSpan(0, 10, 0));
        #endregion

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

Настройка

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        // Call UseAuthentication before calling UseMVC.
        #region snippet2
        app.UseAuthentication();
        #endregion

        app.UseMvc();

Аутентификация

            #region snippet1
            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, user.Email),
                new Claim("FullName", user.FullName),
                new Claim(ClaimTypes.Role, "Administrator"),
            };

            var claimsIdentity = new ClaimsIdentity(
                claims, CookieAuthenticationDefaults.AuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);

            var authProperties = new AuthenticationProperties
            {
                AllowRefresh = true,
                // Refreshing the authentication session should be allowed.

                ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
                // The time at which the authentication ticket expires. A 
                // value set here overrides the ExpireTimeSpan option of 
                // CookieAuthenticationOptions set with AddCookie.

                IsPersistent = true,
                // Whether the authentication session is persisted across 
                // multiple requests. Required when setting the 
                // ExpireTimeSpan option of CookieAuthenticationOptions 
                // set with AddCookie. Also required when setting 
                // ExpiresUtc.

                //IssuedUtc = <DateTimeOffset>,
                // The time at which the authentication ticket was issued.

                //RedirectUri = <string>
                // The full path or absolute URI to be used as an http 
                // redirect response value.
            };

            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme, 
                new ClaimsPrincipal(claimsIdentity),
                authProperties);
            #endregion

и затем я перенаправляю на страницу контактов, но возвращаюсь на страницу входа.

1 Ответ

0 голосов
/ 20 ноября 2018

После тестирования с этим проектом я смог воспроизвести вашу проблему с Chrome, он работает с Edge.

Чтобы заставить его работать с Chrome, вы можете переключиться на launchSettings.json и изменить sslPort для iisExpress на 44344 вместо 0.

...