Приложението спира да генерира бисквитки за влизане

От известно време търся отговор на това, но проблемът изглежда доста сложен и се боря да намеря отговор.

Аз съм начинаещ разработчик на софтуер, работещ за стартираща компания и току-що завърших първата версия на системата за използване от множество потребители. Локалното тестване на софтуера нямаше проблеми, но откакто публикувах софтуера на сървър на windows 2012 на iis, открих голям проблем със системата за влизане.

Когато програмата бъде качена първоначално, множество потребители могат да влязат и да използват програмата без проблеми, но (привидно) произволно системата за влизане напълно спира да функционира на всички компютри, които в момента са излезли. Тези, които са влезли, могат да излязат и да влязат отново със своя акаунт или друг, но тези, които са били излезли в този момент, напълно губят достъп до системата.

Когато използвате инструментите за разработчици в Chrome, изглежда, че всички тези компютри напълно спират да генерират бисквитката, създадена при влизане, и просто пренасочват обратно към екрана за вход.

Системите все още разпознават неправилни влизания и това се случва с различни компютри всеки път, когато кача програмата.

Оценявам, че това е много неясен въпрос, но си скубя косата заради него!

Както казах, аз съм начинаещ и съм напълно нов в хостинга на бизнес сървъри и нямам много опит със системите за самоличност или влизане като цяло, така че всяка помощ е много ценена.

Основно искам да знам дали проблемът най-вероятно е iis, ако да, къде в iis трябва да търся? Или настройките за сигурност на сървърите?

Има ли ефективна причина за отстраняване на грешки, докато работи на сървъра?

Ако проблемът звучи като проблем с кодирането, където файловете за самоличност са били редактирани, уведомете ме какъв клас може да бъде и ще публикувам кода.

Благодаря!

Редактиране:

Global.asax.cs

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        //Creates roles and adds an admin on first start
        RoleCreator rc = new RoleCreator();
        rc.CreateRoles();
        rc.AddAdmin();
    }
}

Startup.Auth.cs

public partial class Startup {

    public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context, user manager and signin manager to use a single instance per request
        app.CreatePerOwinContext(UnitContext.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,
            CookieName="TrackerCookie",
            LoginPath = new PathString("/Login/Login"),
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });
        // Use a cookie to temporarily store information about a user logging in with a third party login provider
        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));

        // Enables the application to remember the second login verification factor such as phone or email.
        // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.
        // This is similar to the RememberMe option when you log in.
        app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
    }

person Verno    schedule 30.07.2015    source източник
comment
Използвате ли удостоверяване чрез формуляри? ако е така, има ли код в global.asax, който създава бисквитка и я записва в отговора?   -  person Nilesh    schedule 30.07.2015
comment
Благодаря за отговора, да, използвам удостоверяване на формуляри, единственият код в global.asax, различен от стандартния, е създаването на администраторска роля по подразбиране и регистриране на персонализиран API. нищо за създаване на бисквитка и писане на отговор... Методът, който създава бисквитката, се съхранява в Stratup.auth.cs   -  person Verno    schedule 30.07.2015
comment
Опитахте ли да отстраните грешки и да проверите какво се случва, когато потребител се върне към приложението? Какво е това startup.auth.cs? използвате ли Owin Startup?   -  person Nilesh    schedule 30.07.2015
comment
Да, при стартиране, системата за влизане е просто персонализирана версия на системата за самоличност на asp, която е част от ново приложение за уеб формуляри. Всъщност беше друг разработчик, който създаде тази страна на системата, затова се боря да го разбера!   -  person Verno    schedule 30.07.2015
comment
Доколкото разбирам, Owin Startup се извиква само когато приложението е достъпно за първи път. Вярвам, че трябва да преместите кода на бисквитката за удостоверяване извън стартирането и вероятно да го добавите в Global.asax Application_AuthenticateRequest заявка. Би било добре, ако можете да поставите стартирането, което създава бисквитката.   -  person Nilesh    schedule 30.07.2015
comment
Здравей Nilesh, благодаря, това има смисъл, публикувах кода от Global.asax и startup, за да го разгледаш   -  person Verno    schedule 30.07.2015
comment
Добре моя грешка. това е стандартният код, използван за удостоверяване с OWIN. Можете ли да проверите заявката с помощта на fiddler и да видите дали бисквитката е записана на клиента или не?   -  person Nilesh    schedule 31.07.2015
comment
Хей Nilesh, намерих това тази сутрин - връзка. Сега просто го тествам. Ако нямам късмет с предложенията, ще проверя заявката с fiddler. Благодаря!   -  person Verno    schedule 31.07.2015
comment
Готино, кажи ми как върви.   -  person Nilesh    schedule 31.07.2015
comment
Здравей отново Нилеш, проблемът ми е решен, оказа се, че е проблем с ASP, който унищожава бисквитките, който никога не е решен. Проблемът се нарича katana bug #197 Има пакет Nugent, наречен „kentor.OwinCookieSaver“, който е заобиколно решение и се нуждае само от един ред код, преди да конфигурирате бисквитката за влизане, за да коригирате проблема. Ще актуализирам въпроса си с решението. Благодаря ви много за помощта! Оценявам го!!!   -  person Verno    schedule 31.07.2015


Отговори (1)


Проблемът вече е разрешен.

За всеки със същия проблем проблемът е причинен от грешка, наречена „katana bug #197“.

Най-лесното решение е да изтеглите NuGet пакета „kentor.OwinCookieSaver“. и добавете app.UseKentorOwinCookieSaver(); над конфигурацията на бисквитката на вашето приложение при стартиране.

https://github.com/KentorIT/owin-cookie-saver

 // kentor.OwinCookieSaver for 'katana bug #197' (login cookies being destroyed on logout!)
            app.UseKentorOwinCookieSaver();
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                CookieName="LoginCookie",
                LoginPath = new PathString("/Login/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });

Microsoft са наясно с проблема и той ще бъде разрешен през 2015 г.

person Verno    schedule 31.07.2015
comment
Вместо да актуализирате въпроса, трябваше да публикувате своя собствен отговор тук вместо този коментар. Сега преместих отговора ви тук и върнах редакцията на въпроса ви. - person Mark Rotteveel; 31.07.2015