Я использую 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](https://i.stack.imgur.com/0xzQr.png)
Если я отключаю 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()