Только что провел последние 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 билета, но я не думаю, что это безопасно, так как злоумышленник может изменить содержимое куки, переместить его и многое другое ..
Итак, кто-нибудь еще согласен?