Vorrei creare un tipo di timer per il conto alla rovescia in base al momento in cui scadrà il cookie OWIN. Sto usando OWIN con MVC 5 e da quello che ho capito SlidingExpiration è attivo per impostazione predefinita. Non uso la "sessione" in quanto ho bisogno che questa app viva in una web farm (non ho intenzione di implementare un database di sessione).Come sapere quando scadrà il cookie OWIN?
risposta
Tutto ciò che serve è ottenere il CookieValidateIdentityContext
durante la fase di convalida dei cookie. Una volta ottenuto, estrai quello che ti serve e mantienile come Claim
o in un altro modo che preferisci.
Per MVC 5 con Asp.NET Identity 2.0, è necessario eseguire due passaggi:
Definire personalizzato
OnValidateIdentity
, estrarre le informazioni dei cookie, e tenerlo comeClaim
.public class Startup { public void Configuration(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, Provider = new CookieAuthenticationProvider { OnValidateIdentity = MyCustomValidateIdentity //refer to the implementation below } } } // this method will be called on every request // it is also one of the few places where you can access unencrypted cookie content as CookieValidateIdentityContext // once you get cookie information you need, keep it as one of the Claims // please ignore the MyUserManager and MyUser classes, they are only for sample, you should have yours private static Task MyCustomValidateIdentity(CookieValidateIdentityContext context) { // validate security stamp for 'sign out everywhere' // here I want to verify the security stamp in every 100 seconds. // but I choose not to regenerate the identity cookie, so I passed in NULL var stampValidator = SecurityStampValidator.OnValidateIdentity<MyUserManager<Myuser>. MyUser>(TimeSpan.FromSeconds(100), null); stampValidator.Invoke(context); // here we get the cookie expiry time var expireUtc = context.Properties.ExpiresUtc; // add the expiry time back to cookie as one of the claims, called 'myExpireUtc' // to ensure that the claim has latest value, we must keep only one claim // otherwise we will be having multiple claims with same type but different values var claimType = "myExpireUtc"; var identity = context.Identity; if(identity.HasClaim(c=> c.Type == claimType)) { var existingClaim = identity.FindFirst(claimType); identity.RemoveClaim(existingClaim); } var newClaim = new Claim(claimType, expireUtc.Value.UtcTicks.ToString()); context.Identity.AddClaim(newClaim); return Task.FromResult(0); } }
Accesso al tuo
Claim
nei vostri metodi del controller// since expiry time has now become part of your claims, you now can get it back easily // this example just returns the remaining time in total seconds, as a string value // assuming this method is part of your controller methods public string RemainingTime() { var identity = User.Identity as ClaimsIdentity; var claimType = "myExpireUtc"; //NOTE: must be the same key value "myExpireUtc" defined in code shown above if(identity != null && identity.HasClaim(c=> c.Type == claimType)) { var expireOn = identity.FindFirstValue(claimType); DateTimeOffset currentUtc = DateTimeOffset.UtcNow; DateTimeOffset? expireUtc = new DateTimeOffset(long.Parse(expireOn), TimeSpan.Zero); var remaining = (expireUtc.Value - currentUtc).TotalSeconds; return remaining.ToString(); } return string.Empty; }
Io uso questo metodo per ricordare i miei utenti di applicazioni per estendere la loro sessione prima tempo della sessione out.
Credito a questo post How do I access Microsoft.Owin.Security.xyz OnAuthenticated context AddClaims values?
Hai un progetto di lavoro in cui viene eseguito questo codice? Lottando per capire cosa fare con ar stampValidator = SecurityStampValidator.OnValidateIdentity
'Uso questo approccio per ricordare agli utenti dell'applicazione di estendere la sessione prima del timeout della sessione.' - come si acquisisce il tempo di scadenza senza estenderlo? Forse correlato - hai attivato slidingexpiration? – mlhDev
- 1. OWIN - Authentication.SignOut() non sembra rimuovere il cookie
- 2. OWIN SignOut non rimuove i cookie
- 3. OWIN rifiuta il cookie di autenticazione il giorno successivo
- 4. Autenticazione cookie OWIN senza identità ASP.NET
- 5. impostazione Microsoft OWIN Test Server cookie
- 6. Come sapere quando il TTS è finito?
- 7. Quando un documento mongodb scadrà dopo essere stato aggiornato?
- 8. Sapere quando il modulo figlio è chiuso
- 9. sapere quando chiamare persiste
- 10. OWIN Cookies vs FormsAuthentication
- 11. Estremo futuro scadrà intestazione e HTTP 304
- 12. Come sapere quando il controller è stato ripreso dallo sfondo?
- 13. Youtube + Selenium (Python) - Come sapere quando termina il video?
- 14. Android: come posso sapere quando gridview ha raggiunto il fondo?
- 15. Come sapere quando il viewpager ha finito di caricare
- 16. Java - Come sapere quando il thread è in attesa?
- 17. come sapere quando il testo viene incollato in UITextView
- 18. Come sapere quando il dispositivo iOS è collegato?
- 19. Come sapere quando il dispositivo è in carica?
- 20. Come sapere quando EnumWindows termina il suo elenco di finestre?
- 21. Come sapere quando Big O è logaritmico?
- 22. Come sapere quando nella finestra VBA
- 23. Come posso sapere quando HttpClient è scaduto?
- 24. Come disconnettersi dai provider Owin?
- 25. differenza tra il modulo HTTP e il middleware OWIN
- 26. Configurare il caching del client quando si utilizzano i file statici OWIN
- 27. È garantito che weak_ptr scadrà quando shared_ptr viene reimpostato sullo stesso indirizzo che contiene?
- 28. Owin Startup Detection
- 29. quando eseguo manualmente il garbage collector, come posso sapere quando è completato?
- 30. Sapere quando mostrare il blocco del codice d'accesso
Non è possibile? – FrankO