2010-09-25 4 views
0

Просто провел последние 3 дня, исследуя членство, iprincipal, личность и другие лакомства .., но что-то еще не ясно. Почему лучше использовать то, что подталкивает просто хранить в сеансе пользователя с минимальным доступом? может содержать роли, разрешения и другие настраиваемые свойства.ASP.NET MVC встроенное членство против сеанса

, чтобы достичь тому же в 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

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

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

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

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

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

+1

Стоит отметить, есть альтернативы выше тоже, если вы счастливы сбиваться в глуши немного. Mongo/Memcached может быть хорошим из магазинов proc для такого рода вещей. – Nik

+0

Спасибо, но рассмотрим вышеприведенный сценарий, имеет ли смысл продолжать удалять БД в каждом запросе, чтобы получить пользователя obj и назначить его контексту? – TomerMiz

+0

Привет, может ли кто-нибудь ответить? – TomerMiz