Я пытаюсь внедрить аутентификацию LDAP на сервере ADAM LDAP моей компании с ASP.NET MVC.
Я уже проверил координаты и учетные данные с другими клиентами LDAP, и они работают нормально.Сервер не защищен SSL, и он работает на стандартном порте 389, поэтому я устанавливаю connectionProtection = "None" в поставщике членства web.config.
Когда я пытаюсь войти со страницей входа по умолчанию, я получаю ошибка: «Учетные данные по умолчанию не поддерживаются, если для защиты соединения установлено значение Нет» * .
Вот части web.config
<configuration>
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://mycompanyldapserver.com:389"/>
....
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionProtection="None"
attributeMapUsername="sAMAccountName"
enableSearchMethods="True"/>
</providers>
</membership>
AccountController
[AllowAnonymous]
[HttpPost]
public JsonResult JsonLogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
// >> Membership.ValidateUser THROWS EXCEPTION AFTER LOGIN TRY >>
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return Json(new { success = true, redirect = returnUrl });
}
РЕДАКТИРОВАТЬ
Я обнаружил, что исключение «Учетные данные по умолчанию не поддерживаются, когда для защиты соединения установлено значение Нет», это неВыдается, когда я добавляю эти параметры в DefaultMembershipProvider:
connectionUsername="username"
connectionPassword="userpwd"
Проблема в том, что имя пользователя и пароль должны изменить время выполнения, основываясь на форме входа в систему ... Можете ли вы помочь мне установить эти параметры времени выполнения, пожалуйста?Я попытался реализовать это решение, которое, как я полагаю, могло бы работать ... Я полагаю, потому что теперь я получаю ошибку "неправильное имя пользователя или пароль" вместо указанного выше исключения, указанного в теме.Я думаю, что я в шаге от решения этой проблемы, в любом случае мне нужна помощь какого-то эксперта.Я не знаю, если следующее решение может работать должным образом для проверки пользователя:
МОДИФИЦИРОВАННЫЙ КОНТРОЛЛЕР СЧЕТА: Я ПЫТАЮСЯ ДОБАВИТЬ УЧАСТНИК ПОСТАВЩИКА ЧЛЕНСТВА
[AllowAnonymous]
[HttpPost]
public JsonResult JsonLogOn(LogOnModel model, string returnUrl)
{
// I'm trying to add membership provider runtime...
System.Web.Security.ActiveDirectoryMembershipProvider mprov = new System.Web.Security.ActiveDirectoryMembershipProvider();
NameValueCollection objConfig = new NameValueCollection();
objConfig.Add("name", "DefaultMembershipProvider");
objConfig.Add("type", "System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
objConfig.Add("connectionStringName", "ADConnectionString");
objConfig.Add("connectionProtection", "None");
objConfig.Add("connectionUsername", model.UserName);
objConfig.Add("connectionPassword", model.Password);
objConfig.Add("attributeMapUsername", "sAMAccountName");
objConfig.Add("enableSearchMethods", "True");
try
{
// Here I get "wrong username or password error...wrong DN base? I do not know.....
mprov.Initialize(objConfig["name"], objConfig);
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return Json(new { success = true, redirect = returnUrl });
}
catch (System.Runtime.InteropServices.COMException ex)
{
// For now I am catching all COMExceptions...if it works I could change behavior...
ModelState.AddModelError("", ex.Message);
}
Спасибо взаранее за вашу драгоценную помощь.