ASP.NET Core 2.1 - куки-файл аутентификации удален, но пользователь все равно может войти в систему, не перенаправляя его на внешний вход - PullRequest
0 голосов
/ 05 ноября 2018

Добрый день! В настоящее время я создаю веб-сайт, который использует аутентификацию Google для включения персонализации контента. У меня нет проблем со входом в систему и получением информации о зарегистрированном пользователе, но .NET не выводит пользователя из системы полностью, когда я вызываю функцию SignOutAsync (), так как пользователь мог сразу войти в систему, снова нажав кнопку «Вход». После очистки кэша браузера пользователь будет перенаправлен на страницу входа в Google при нажатии кнопки входа в систему.

Конфигурация служб в Startup.cs:

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;
        });

        // Configure authentication service
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = "Google";
        })
            .AddCookie("Cookies")
            .AddGoogle("Google", options =>
            {
                options.ClientId = Configuration["Authentication:Google:ClientId"];
                options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
            });

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddSingleton<IRecommender, OntologyRecommender>();

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

Конфигурация промежуточного программного обеспечения на Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

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

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Действие входа в UserController.cs:

 public IActionResult Login()
    {
        return Challenge(new AuthenticationProperties() { RedirectUri = "/" });
    }

Действие выхода из системы в UserController.cs:

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {   
        await HttpContext.SignOutAsync();
        HttpContext.Response.Cookies.Delete(".AspNetCore.Cookies");
        return RedirectToAction("Index", "Home");
    }

Я новичок в области аутентификации ASP.NET Core, поэтому я был бы признателен, если бы кто-нибудь мог просто помочь мне в этом вопросе, спасибо!

Ответы [ 2 ]

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

Вы можете перенаправить пользователя в конечную точку выхода из Google, чтобы выйти из системы:

 await HttpContext.SignOutAsync();
 HttpContext.Response.Cookies.Delete(".AspNetCore.Cookies");
 return Redirect("https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=https://localhost:44310");

Замените "https://localhost:44310" на свой собственный URL-адрес веб-сайта. После этого, когда пользователь снова нажмет на кнопку входа, пользователь будет перенаправлен на страницу входа в Google.

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

Вы должны зациклить куки-файлы приложения - вот пример кода:

if (HttpContext.Request.Cookies[".MyCookie"] != null)
{
    var siteCookies = HttpContext.Request.Cookies.Where(c => c.Key.StartsWith(".MyCookie"));
    foreach (var cookie in siteCookies)
    {
        Response.Cookies.Delete(cookie.Key);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...