ASP.NET MVC встроенное членство против сессии - PullRequest
0 голосов
/ 25 сентября 2010

Только что провел последние 3 дня, исследуя членство, личность, личность и другие вкусности ... но что-то до сих пор неясно. Почему лучше использовать тот, который вызывается, просто сохраняя минимизированный вошедший в систему пользовательский объект в сеансе? он может содержать роли, разрешения и другие пользовательские свойства.

чтобы добиться того же, что и в форме asp.net, я бы сделал:

protected void Application_AuthenticateRequest() 
{ 
    HttpCookie cookie = Request.Cookies.Get(FormsAuthentication.FormsCookieName); 
    if (cookie == null) 
        return; 
    bool isPersistent; 
    int webuserid = GetUserId(cookie, out isPersistent); 

    //Lets see if the user exists 
    var webUserRepository = Kernel.Get<IWebUserRepository>(); 

    try 
    { 
        WebUser current = webUserRepository.GetById(webuserid); 

        //Refresh the cookie 
        var formsAuth = Kernel.Get<IFormsAuthService>(); 

        Response.Cookies.Add(formsAuth.GetAuthCookie(current, isPersistent)); 
        Context.User = current; 
    } 
    catch (Exception ex) 
    { 
        //TODO: Logging 
        RemoveAuthCookieAndRedirectToDefaultPage(); 
    } 
} 

private int GetUserId(HttpCookie cookie, out bool isPersistent) 
{ 
    try 
    { 
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 
        isPersistent = ticket.IsPersistent; 
        return int.Parse(ticket.UserData); 
    } 
    catch (Exception ex) 
    { 
        //TODO: Logging 

        RemoveAuthCookieAndRedirectToDefaultPage(); 
        isPersistent = false; 
        return -1; 
    } 
}

Так что мне нужно будет запрашивать БД по каждому аутентифицированному запросу, когда при использовании сеанса я делаю это только один раз, когда пользователь входит в систему, я знаю, что вы можете хранить роли и другие пользовательские данные в cookie билета, но я не думаю, что это безопасно, так как злоумышленник может изменить содержимое куки, переместить его и многое другое ..

Итак, кто-нибудь еще согласен?

1 Ответ

1 голос
/ 26 сентября 2010

Состояние сеанса InProc по умолчанию недолговечно и будет "исчезать" всякий раз, когда ваш пул приложений перезагружается.

Сеанс SqlStore долговечен, но тогда у вас есть дополнительная нагрузка на ваш сервер БД.

Файлы cookie - лучший выбор для веб-сайтов на данный момент, и это, вероятно, не изменится в течение длительного времени. Файлы cookie относительно безопасны, и, пока вы шифруете содержимое файлов cookie, что по умолчанию делает .net, вы должны быть в порядке.

Примечание. В .Net существует большой недостаток безопасности, связанный с методами шифрования по умолчанию, поэтому, когда я говорю «безопасный», я имею в виду «безопасный» и, вероятно, снова.

http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx

...