Создал приложение mvc5 с Identity2, как настроить его на использование файлов cookie сеанса, чтобы срок их действия истекал при закрытии браузера.

Создал приложение mvc5 с Identity2, используя логин Google (практически пустое приложение, с включенным материалом Google)

Как мне настроить его для использования файлов cookie сеанса, чтобы они истекали при закрытии браузера. Приложение будет использоваться студентами, которые могут менять места в горячем режиме, поэтому мне нужно, чтобы срок действия входа истекал при закрытии браузера.

Я прочитал статью SO, в которой подразумевается, что это значение по умолчанию, но когда я закрываю браузер и возвращаюсь на сайт, он запоминает логин Google.

Изменить

Извините, что разорвал пузырь, но это не дубликат.

Он воспроизводится в Chrome после изменения настроек в предполагаемом «ответе», а также воспроизводится в IE... Это проблема входа в Asp.net Identity 2 + Google, а не проблема Chrome.

Изменить

Добавление файла аутентификации запуска для справки по установке

using System;
using System.Configuration;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.Google;
using Owin;
using StudentPortalGSuite.Models;

namespace StudentPortalGSuite
{
    public partial class Startup
    {
        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context, user manager and signin manager to use a single instance per request
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

            // Enable the application to use a cookie to store information for the signed in user
            // and to use a cookie to temporarily store information about a user logging in with a third party login provider
            // Configure the sign in cookie
            app.UseCookieAuthentication(
            new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                               Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes( 30 ),
                        regenerateIdentity: ( manager, user ) => user.GenerateUserIdentityAsync( manager )
                        )
                }, 
            });            
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

            // per https://docs.microsoft.com/en-us/aspnet/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on - EWB
            //dev-jcsn email
            app.UseGoogleAuthentication( new GoogleOAuth2AuthenticationOptions()
            {
                ClientId     = "...",
                ClientSecret = "..."


            } );
            //});
        }
    }
}

EDIT Вариант использования, который я пытаюсь исправить, заключается в том, что, поскольку наше приложение используется в классе, этот ученик A закрывает свой браузер вместо выхода из системы, а затем следующий пользователь пытается войти в систему. В нынешнем виде они автоматически вошли в учетную запись пользователя А.

Я также был бы готов к 100% выходу пользователя из системы при перенаправлении на страницу входа, но все способы, которые я пробовал, не работают.


person Eric Brown - Cal    schedule 28.11.2017    source источник
comment
Я тестировал MVC5 с Identity 2 и Google. Он выходит из системы по умолчанию, когда браузер закрывается. Что-то должно быть где-то неправильно настроено, но здесь недостаточно подробностей, чтобы понять это.   -  person Matthew    schedule 29.11.2017
comment
Я предполагаю, что это ошибка конфигурации, но все, что я читал, говорит, что она включена по умолчанию.   -  person Eric Brown - Cal    schedule 29.11.2017
comment
Вероятно, потому что сеанс учетной записи Google все еще действителен. Им нужно будет выйти из Google. Есть ли шанс, что вы могли бы просто создать отдельные сетевые логины для студентов?   -  person Mister Epic    schedule 30.11.2017
comment
Мне нужно войти в наше приложение, а затем использовать единый вход в Google Apps... Таким образом, вход в Google является обязательным требованием, а пользователи — это дети из неблагополучных семей, которых обучают работе с компьютерами, и мы не можем просто научить их выходить из системы. должны сделать это для них, когда они закрывают браузер (или заходят на страницу входа). В любом случае, чтобы закрыть сеансы учетной записи Google?   -  person Eric Brown - Cal    schedule 30.11.2017
comment
Итак, проблема в том, что он не выходит из приложения AspNet или не выходит из своей учетной записи Google? Файл cookie аутентификации AspNet не должен быть действительным, если они закрывают браузер и снова открывают его. Я не уверен, что Google остается в системе.   -  person Matthew    schedule 01.12.2017
comment
Хуже того, мое лучшее предположение состоит в том, что половина ASP.Net выходит из системы, а половина Google - нет (либо Owin, либо Google Session), затем иногда она просто снова входит в систему, а иногда переходит в сломанное наполовину выходное состояние, где он пытается войти в систему и терпит неудачу, перенаправляя на страницу входа.   -  person Eric Brown - Cal    schedule 01.12.2017
comment
В случае, если я не понял, что могу снова войти в систему, это означает успешный выход из системы (тайм-аут токена?)... более распространено неработающее состояние.   -  person Eric Brown - Cal    schedule 04.12.2017
comment
Можете ли вы настроить машины для очистки файлов cookie браузера при его закрытии?   -  person alex    schedule 06.12.2017
comment
Я удалил все куки в EditThisCookie, а логин на стороне google все еще там.   -  person Eric Brown - Cal    schedule 06.12.2017


Ответы (2)


Возможно, вы можете поймать событие закрытия окна на странице и вызвать метод выхода из системы.

$(window).on("beforeunload", function() { 
    //ajax call to a post controller that logs the user out

})
person katesky8    schedule 05.12.2017
comment
это работало бы лучше, если бы я мог найти метод, который надежно выходит из системы... Я вызываю каждый метод, который я могу найти на своей странице, готовым на странице входа в систему, но он не работает для выхода из «заброшенных сеансов». - person Eric Brown - Cal; 07.12.2017
comment
У вас есть этот метод Action? [HttpPost] [ValidateAntiForgeryToken] public async Task‹ActionResult› LogOff() { var user = await UserManager.FindByNameAsync(User.Identity.Name); AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); ожидание UserManager.UpdateSecurityStampAsync(user.Id); вернуть RedirectToAction(Логин, Аккаунт); } - person katesky8; 07.12.2017
comment
За исключением того, что это не асинхронно, да - person Eric Brown - Cal; 07.12.2017
comment
тогда вы можете это сделать, или это не работает для вас? $(window).on(beforeunload, function() { $.post(/logoff, function(data, status){ alert(Data: + data + \nStatus: + status); }); }) - person katesky8; 08.12.2017

Вызов этого в верхней части метода контроллера входа в систему решил проблему.

  Request.GetOwinContext().Authentication.SignOut( DefaultAuthenticationTypes.ApplicationCookie );// https://stackoverflow.com/questions/28999318/owin-authentication-signout-doesnt-seem-to-remove-the-cookie - stralos s answer
  Request.GetOwinContext().Authentication.SignOut( DefaultAuthenticationTypes.ExternalCookie );
person Eric Brown - Cal    schedule 11.12.2017