"Войти как другой пользователь" MVC 4 Аутентификация Windows
У меня есть проект интрасети, написанный в MVC 4, который использует проверку подлинности Windows для авторизации и аутентификации пользователей.
Мне нужно добавить функциональность "Войти как другой пользователь".
После некоторого поиска я нашел это решение, которое предлагает вернуть 401, и создал следующее действие (которое вызывается с использованием формы):
//
// POST: /Home/LogOut
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOut()
{
return new HttpUnauthorizedResult();
}
Действие вызывается, и браузер открывает окно имени пользователя и пароля, однако по мере того, как результат перенаправляется обратно на действие, возвращается 401.
Как перенаправить пользователя назад к предыдущему действию после входа в систему с новыми учетными данными?
Есть ли способ аннулировать учетные данные на стороне сервера вместо того, чтобы просто возвращать 401?
Ответы
Ответ 1
Люди обратный инженерный\декомпилированный некоторый код из Sharepoint, который, случается, имеет эту функцию.
Я тестировал его в приложении ASP.NET MVC 5
и работал как ожидалось.
Код основан на декомпиляции Microsoft.TeamFoundation.WebAccess, который имеет "Войти как другой пользовательской" функции.
public ActionResult LogOut()
{
HttpCookie cookie = Request.Cookies["TSWA-Last-User"];
if(User.Identity.IsAuthenticated == false || cookie == null || StringComparer.OrdinalIgnoreCase.Equals(User.Identity.Name, cookie.Value))
{
string name = string.Empty;
if(Request.IsAuthenticated)
{
name = User.Identity.Name;
}
cookie = new HttpCookie("TSWA-Last-User", name);
Response.Cookies.Set(cookie);
Response.AppendHeader("Connection", "close");
Response.StatusCode = 401; // Unauthorized;
Response.Clear();
//should probably do a redirect here to the unauthorized/failed login page
//if you know how to do this, please tap it on the comments below
Response.Write("Unauthorized. Reload the page to try again...");
Response.End();
return RedirectToAction("Index");
}
cookie = new HttpCookie("TSWA-Last-User", string.Empty)
{
Expires = DateTime.Now.AddYears(-5)
};
Response.Cookies.Set(cookie);
return RedirectToAction("Index");
}
Источник:
Признать пользователя как другого пользователя при использовании проверки подлинности Windows в asp.net
Ответ 2
Этот метод всегда будет регистрировать пользователя и перенаправлять его на главную страницу. Я также добавил [AllowAnonymous]
, чтобы каждый мог получить доступ к этому методу.
[AllowAnonymous]
public ActionResult LogOut()
{
HttpCookie cookie = Request.Cookies["TSWA-Last-User"];
cookie = new HttpCookie("TSWA-Last-User", string.Empty)
{
Expires = DateTime.Now.AddYears(-5)
};
Response.Cookies.Set(cookie);
Response.AppendHeader("Connection", "close");
Response.StatusCode = 401; // Unauthorized;
Response.Clear();
// redirect to home
Response.Write("<script type='text/javascript'>");
Response.Write("var getUrl = window.location; var baseUrl = getUrl.protocol + " +
"'//' + getUrl.host + '/' + getUrl.pathname.split('/')[1]; window.location.href = baseUrl; ");
Response.Write("</script>");
Response.End();
return RedirectToAction("Index");
}