Autentifikace uživatele   zodpovězená otázka

C#, ASP.NET MVC, Bezpečnost

Zdravím Vás,

měl bych dva dotazy.

1)

Mám aplikaci (MVC.NET), kde používám pro přihlašování uživatelů následující nastavení:

<authentication mode="Forms">
   <forms loginUrl="~/Login" timeout="2880" />
</authentication>

a při odeslání formuláře a ověření:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                        1, 
                        model.LoginName,
                        DateTime.Now,
                        DateTime.Now.AddMinutes(20),
                        false,
                        GetUserRole(),
                        FormsAuthentication.FormsCookiePath);
                    string hashCookies = FormsAuthentication.Encrypt(ticket);
                    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
                    Response.Cookies.Add(cookie);
                    string returnUrl = Request.QueryString["ReturnUrl"];
                    if (returnUrl == null)
                    {
                        returnUrl = "~/Home";
                    }
                    Response.Redirect(returnUrl);

Tady by mě zajímalo, jaký ve přesný vztah (existuje-li) mezi hodnotu atribut timeout ve web.configu a datem expirace v tiketu?

2)

druhý dotaz trochu souvisí s dotazem 1 - jakým způsobem a odkud vytáhnu, kdy vyprší platnost přihlášení. Je to proto, že potřebuji udělat odpočet automatického odhlášení ze stránek.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Stačí trošku hledat -> http://support.microsoft.com/kb/910443

A datum expirace by mělo být možné z objektu FormsAuthen... tiketu přečíst, tuším ,že má vlastnost ExpireDate, která uvádí čas, kdy dojde k vypršení - není tedy pak již nic složitého si vše z tohoto času dopočítat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ad 1) Tento vztah je takový, že pokud autentizační tiket vystavuje třída FormsAuthentication sama, tak právě jako jeho exspiraci (a stejnou pak do příslušného cookie) použije tu hodnotu nastavenou ve web.config.

Protože si ale tiket vystavujete vlastním kódem, kde máte hodnotu "natvrdo", hodnota z configu použitá není. Ale jinak vám nic nebrání si jí i v tom vlastním kódu vytáhnout, měla by to být normálně vlastnost FormsAuthentication.Timeout.

Jinak na kód, kterým vystavuje tiket třída FormsAuthentication (dělá to trochu jinak) se pro inspiraci podívejte zde:

http://www.dotnetportal.cz/blogy/15/Null...

ad 2) Na tiket, který byl vydaný aktuálně přihlášenému uživateli, se dostanete přes aktuální objekt FormsIdentity:

if (HttpContext.Current.Request.IsAuthenticated)
{
    var identity = (FormsIdentity)HttpContext.Current.User.Identity;
    var ticket = identity.Ticket;
}

A na něm se dostanete k jeho exspiraci.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback