Я разрабатываю веб-приложение MVC с помощью проверки подлинности Windows. Цель состоит в том, чтобы разрешить автоматическое ведение журнала при открытии страницы, но разрешить подписывание по-разному по требованию. Я пытаюсь использовать код здесь "Войти как другой пользователь" MVC 4 Windows Authentication и здесь http://www.roelvanlisdonk.nl/?p=825, но ни один из них не работает для меня.
Я упростил дело до максимума, поэтому он выглядит следующим образом:
public string Logout()
{
AuthenticationAttempts = AuthenticationAttempts + 1;
if (AuthenticationAttempts == 1)
{
this.Send401();
}
var domain = User.Identity.Name.Split('\\')[0];
var user = User.Identity.Name.Split('\\')[1];
return string.Format("Domain: {0}<br>User: {1}", domain, user);
}
/// <summary>
/// Send a 401 response
/// </summary>
public void Send401()
{
// Create a 401 response, the browser will show the log-in dialogbox, asking the user to supply new credentials,
// if browser is not set to "automaticaly sign in with current credentials"
Response.Buffer = true;
Response.StatusCode = 401;
Response.StatusDescription = "Unauthorized";
// A authentication header must be supplied. This header can be changed to Negotiate when using keberos authentication
Response.AddHeader("WWW-Authenticate", "NTLM");
// Send the 401 response
Response.End();
}
private int _authenticationAttempts = 0;
public int AuthenticationAttempts
{
get
{
if (!string.IsNullOrEmpty(string.Format("{0}", Session["AuthenticationAttempts"])))
{
int.TryParse(Session["AuthenticationAttempts"].ToString(), out _authenticationAttempts);
}
return _authenticationAttempts;
}
set
{
_authenticationAttempts = value;
Session["AuthenticationAttempts"] = _authenticationAttempts;
}
}
Когда я впервые вызываю метод действия "Выход из системы", я получаю окно входа в систему, но когда я нажимаю "ОК", User.Identity все еще такой, какой он есть.
РЕДАКТИРОВАТЬ:
я нашел это
Request.ServerVariables["LOGON_USER"]
сохраняет только зарегистрированные пользователи, но почему User.Identity не меняется?
Шаг 1. Откройте файл Web.config и внесите следующие изменения:
<!—
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
-->
<authentication mode="Windows" />
Шаг 2. По умолчанию приложения MVC используют проверку подлинности и простое членство, поэтому вам нужно сделать это "ложным" для запуска проверки подлинности Windows.
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="autoFormsAuthentication" value="false" />
<add key="enableSimpleMembership" value="false"/>
</appSettings>
Шаг 3. Выберите имя проекта в проводнике решений, а затем в проводнике свойств щелкните, чтобы включить проверку подлинности Windows.
Шаг 4: В проводнике свойств вы можете отключить анонимную аутентификацию, если вы хотите, чтобы ваш полный сайт для аутентифицированных пользователей на сервере разработки.