none
Reinidirizzamento alla pagina di Login dopo pochi minuti di inattività RRS feed

  • Domanda

  • Salve a tutti,

    ho un'applicazione ASP.NET Core 3.1 MVC. Essa ha una gestione utenti ed una pagina di Login per inserire nome utente e password.

    Una volta che l'utente ha eseguito l'accesso, le sue credenziali sono salvate in un Cookie del browser.
    Il Cookie ha una validità di 2 settimane. Questa gestione permette che alla chiusura del browser le credenziali utente non sono perse ed al successivo accesso non venga più richiesto di effettuare il Login.

    Premetto che eseguendo l'applicazione da Visual Studio, quindi su localhost tutto funziona come previsto.

    Pubblicando l'applicazione online su Hosting Windows con IIS, l'applicazione reindirizza alla pagina di Login dopo un breve tempo di inattività (circa 10 min), come se il Cookie non avesse alcun effetto. Questo è particolarmente fastidioso perchè l'utente deve continuamente accedere tramite Login.

    Qualcuno ha già affrontato questa problematica?

    giovedì 29 aprile 2021 14:37

Risposte

  • Il cookie ha una durata di 2 settimane. Se è scaduto l'utente deve effettuare il login ed il cookie viene ricreato con una scadenza di 2 settimane. Quindi mi aspetterei che il login sia nuovamente richiesto ogni 2 settimane e non dopo 10 minuti di inattività.

    Comunque quello che ho trovato nella documentazione Microsoft nella sezione "Data Protection" sembra riguardare le mie problematiche riguardo ai cookie per l'autenticazione.

    Host ASP.NET Core on Windows with IIS | Microsoft Docs

    If the key ring is stored in memory when the app restarts:

    • All cookie-based authentication tokens are invalidated.
    • Users are required to sign in again on their next request.
    • Any data protected with the key ring can no longer be decrypted. This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

    Purtroppo sono impostazioni di IIS e dell'Application Pool, i quali sono al di fuori della mia portata poichè gestiti dal servizio di Hosting.

    martedì 4 maggio 2021 06:44

Tutte le risposte

  • Salve Gaetano,

    Controlla questo link per capire come devi modificare le "permissions" per evitare il login-loop.



    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 30 aprile 2021 07:13
    Moderatore
  • Ciao Plamen, grazie per la risposta.

    Volevo specificare che la mia applicazione non usa l'autenticazione di Windows (Integrated Windows Authentication).
    Gli utenti accedono con un nome utente e password, se essi coincidono tra quelli memorizzati nel database l'accesso viene consentito.

    Di seguito la procedura di Login nell' AccountController

            [HttpPost]
            [AllowAnonymous]
            public async Task<IActionResult> Login(LoginModel model)
            {
                model.ReturnUrl = model.ReturnUrl ?? Url.Content("~/");
    
                if (ModelState.IsValid)
                {
                    var user = _userManager.Users.SingleOrDefault(u => u.UserName == model.UserName);
                    if (user == null)
                    {
                        ModelState.AddModelError("LoginFailed", ValidationMessage.InvalidUserName);
                        return View();
                    }
                    
                    var passwordCheckResult = await _signInManager.CheckPasswordSignInAsync(user, model.Password, false);
                    if (passwordCheckResult.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, true);
                        return LocalRedirect(model.ReturnUrl);
                    }
    
                    ModelState.AddModelError("LoginFailed", ValidationMessage.LoginFailed);
                }
    
                return View();
            }

    venerdì 30 aprile 2021 09:04
  • Ciao Gaetano,
    la durata della sessione generalmente è di 20 minuti, ed è settabile da IIS, non programmaticamente.
    Potresti comunque sovrascrivere questo comportamento nel web.config (ma non tutti gli hosting lo permettono).

    Ciao


    Paolo Pranzo

    lunedì 3 maggio 2021 07:47
  • Ciao Paolo, grazie per la risposta.

    Ho chiesto al gestore del servizio di Hosting e mi ha confermato che il Timeout per inattività è di 10 minuti e l'azione associata è la terminazione del processo.

    Detto questo, anche se il processo viene arrestato, ad una successiva richiesta al server che richiede autenticazione, non dovrebbe essere letto il cookie che contiene le credenziali utente ed eseguire automaticamente l'accesso senza reindirizzare alla pagina di Login? 


    lunedì 3 maggio 2021 13:37

  • Detto questo, anche se il processo viene arrestato, ad una successiva richiesta al server che richiede autenticazione, non dovrebbe essere letto il cookie che contiene le credenziali utente ed eseguire automaticamente l'accesso senza reindirizzare alla pagina di Login? 


    Effettua il login e vedi la scadenza del cookie, probabilmente non è più valido.

    Paolo Pranzo

    martedì 4 maggio 2021 05:38
  • Il cookie ha una durata di 2 settimane. Se è scaduto l'utente deve effettuare il login ed il cookie viene ricreato con una scadenza di 2 settimane. Quindi mi aspetterei che il login sia nuovamente richiesto ogni 2 settimane e non dopo 10 minuti di inattività.

    Comunque quello che ho trovato nella documentazione Microsoft nella sezione "Data Protection" sembra riguardare le mie problematiche riguardo ai cookie per l'autenticazione.

    Host ASP.NET Core on Windows with IIS | Microsoft Docs

    If the key ring is stored in memory when the app restarts:

    • All cookie-based authentication tokens are invalidated.
    • Users are required to sign in again on their next request.
    • Any data protected with the key ring can no longer be decrypted. This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

    Purtroppo sono impostazioni di IIS e dell'Application Pool, i quali sono al di fuori della mia portata poichè gestiti dal servizio di Hosting.

    martedì 4 maggio 2021 06:44