Вопрос по asp.net-mvc, asp.net, forms-authentication, cookies, active-directory – Проверьте, отличается ли пароль Active Directory от cookie

0

У меня есть приложение asp.net, которое должно регистрировать пользователей в Active Directory с использованием проверки подлинности с помощью форм (проверка подлинности Windows не является вариантом с данными требованиями).

Я сохраняю файлы cookie для аутентификации следующим образом:

if (Membership.ValidateUser(model.UserName, model.Password))
{
    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
}

Это прекрасно работает, за исключением того, что cookie проверяет подлинность пользователя даже после того, как он меняет свой пароль Active Directory.

Есть ли способ узнать, изменился ли пароль пользователя?

Я использую asp.net MVC3 с .NET 4

What I've Tried

Если вы считаете, что этот код должен работать, однако HttpWebResponse никогда не содержит файлов cookie. Не совсем уверен, что я делаю неправильно.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Request.Url);
request.CookieContainer = new CookieContainer();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Cookie authCookie = response.Cookies["AuthCookie"];
if (authCookie.TimeStamp.CompareTo(Membership.GetUser().LastPasswordChangedDate) < 0)
{
    authCookie.Expired = true;
}

Ваш Ответ

1   ответ
2

if (Membership.ValidateUser(model.UserName, model.Password))
{
  string userData = DateTime.Now.ToString();

  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    username,
    DateTime.Now,
    DateTime.Now.AddMinutes(30),
    isPersistent,
    userData,
    FormsAuthentication.FormsCookiePath);

  // Encrypt the ticket.
  string encTicket = FormsAuthentication.Encrypt(ticket);

  // Create the cookie.
  Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
}

Теперь при аутентификации пользователя

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.value);
if (DateTime.Parse(ticket.UserData) > Membership.GetUser().LastPasswordChangedDate)
{
    FormsAuthentication.SignOut();
    FormsAuthentication.RedirectToLoginPage();
}
Понял .. Второй кусок кода должен быть обновлен. Дай мне немного времени.
Извините, я не был уверен в MVC ... Я думаю, что в MVC вы можете получить доступ к cookie-файлам по Request.Cookies [& quot; foo & quot;];
@CavynVonDeylen Обновлено. При создании файла cookie мы добавляем метку времени в качестве пользовательских данных. В следующий раз, когда запрос поступит в ваше приложение, cookie будет присутствовать в запросе, который мы извлекаем обратно и берем datetime, сохраненный в userdata, и сравниваем с lastpasswordchangedatetime
Спасибо, но это до сих пор не решило мою проблему. Моя проблема заключается не в создании файла cookie, а в том, что он создается очень хорошо (проверено в настройках Chrome). Я просто не могу его восстановить. Кроме того, я предполагаю, что вашим объектом запроса является объект HttpRequestBase, включенный в System.Web.Mvc, но он возвращает только те HttpCookies, которые не имеют свойства TimeStamp. Cavyn VonDeylen
Еще раз спасибо, я благодарен за помощь, но я все еще не понимаю, где находится ваш "запрос" объект во втором блоке кода происходит из. HttpWebRequest не имеет свойства Cookies, а HttpRequestBase возвращает объекты HttpCookie, а не объекты Cookie. Cavyn VonDeylen

Похожие вопросы