Войдите в систему как другой пользователь в ASP.MVC не меняет личность пользователя

1

Я разрабатываю веб-приложение 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 не меняется?

Теги:
asp.net-mvc
asp.net-mvc-4
windows-authentication

1 ответ

1

Шаг 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: В проводнике свойств вы можете отключить анонимную аутентификацию, если вы хотите, чтобы ваш полный сайт для аутентифицированных пользователей на сервере разработки.

Справка

  • 0
    Спасибо, вы правы, все это требуется. Но у меня все эти настройки правильно установлены ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню