Олицетворение пользователя с авторизацией форм - PullRequest
1 голос
/ 07 февраля 2020

Я использую Forms Authorization для входа в мое веб-приложение с использованием активного каталога, и я пытаюсь сделать это, когда пользователь входит в систему, выдавая себя за этого пользователя. Но я сталкиваюсь с несколькими проблемами, когда я включаю олицетворение через IIS или web.config, я получаю ошибку 500, вот этот раздел моего web.config:

<customErrors mode="Off"/>
<authentication mode="Forms">
  <forms name=".ADAuthCookie" loginUrl="~/Login/Index" timeout="45" slidingExpiration="false" protection="All" path="/" />
</authentication>
<identity impersonate="true" />
<membership defaultProvider="ADMembershipProvider">
  <providers>
    <clear />
    <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
  </providers>
</membership>

Если я установлю свои учетные данные в элементе идентификации это работает без настройки моего IIS:

<identity impersonate="true" userName="domain\username" password="password" />

Вот мое разрешение в моем IIS, это то, что он в настоящее время установлен также:

enter image description here

Если я отключаю Anonymous и включаю олицетворение, я получаю ошибку 500.

Что я делаю не так и как мне заставить Authentication с помощью Forms работать с олицетворением.

Вот мой контроллер входа в систему:

[HttpPost]
public ActionResult Index(Login model, string returnUrl)
{
    if (!ModelState.IsValid)
    {

        ModelState.AddModelError("", "The user name or password provided is incorrect.");

        return View(model);
    }

    if (Membership.ValidateUser(model.UserName, model.Password))
    {
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
        {
            return Redirect(returnUrl);
        }

        return RedirectToAction("Index", "Home");
    }

    ModelState.AddModelError("", "The user name or password provided is incorrect.");

    return View(model);
}

ОБНОВЛЕНИЕ

Я получил ошибку 500 через <validation validateIntegratedModeConfiguration="false" />, но подменщик все еще не работает, пока я не установлю полномочия. Могу ли я установить учетные данные входящего в систему человека?

ОБНОВЛЕНИЕ

Когда я запускаю этот код, я вижу, что он заполнен правильным именем пользователя и олицетворение установлено в истину, что я делаю не так?

System.Security.Principal.WindowsIdentity.GetCurrent()

1 Ответ

3 голосов
/ 10 февраля 2020

Сосредоточение внимания на этой части: Я пытаюсь сделать, когда пользователь входит в систему, выдать себя за этого пользователя.

То, что вы ищете, называется делегированием. .

Для делегирования без использования имени пользователя и пароля пользователя используется встроенная Windows аутентификация . Вы не можете достичь этого, используя Аутентификация по формам , если не используете имя пользователя и пароль пользователя и не выполните переход по протоколу .

Для целей обучения Этот пост показывает пример того, как вы можете сделать это в коде, используя имя пользователя и пароль, которые вы получаете со страницы входа в систему.

Я знаю, что это может разочаровать, но если вам нужно делегирование, вы должны полагаться на Windows Аутентификация и настройка браузера, IIS и ASP. NET приложения. Чтобы увидеть полное руководство, взгляните на Как настроить приложение ASP. NET для сценария делегирования .

Это не полное руководство по конфигурациям, но показывает наиболее важные конфигурации:

  • Настройка браузера : для настройки браузера, для IE , вам нужно проверить Включить Windows Встроенная аутентификация в Дополнительно вкладка Inte rnet Параметры .
  • Настройка IIS : для настройки IIS необходимо отключить все проверки подлинности в IIS, включая Анонимная проверка подлинности и просто включить Windows Проверка подлинности .

  • Настройка ASP. NET Приложение : В файле web.config необходимо установить <authentication mode="Windows" />, а также установить <identity impersonate="true" />, а также <allow users="*" /><deny users="?" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...