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

0

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

m сохраняю куки аутентификации примерно так:

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

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

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

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

Что я've пробовал

Если вы считаете, что этот код должен работать, однако 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 ["Foo»]; Ramesh
Еще раз спасибо, я ценю помощь, но я все еще нене получить, где ваш "запрос" объект во втором блоке кода происходит из. HttpWebRequest не делаету него есть свойство Cookies, и HttpRequestBase возвращает объекты HttpCookie, а не объекты Cookie. Cavyn VonDeylen
@CavynVonDeylen Обновлено. При создании файла cookie мы добавляем метку времени в качестве пользовательских данных. В следующий раз, когда запрос поступит в ваше приложение, cookie будет присутствовать в запросе, который мы извлекаем обратно и берем datetime, сохраненный в userdata, и сравниваем с lastpasswordchangedatetime Ramesh
Хорошо, я понял. Благодарю. Cavyn VonDeylen

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