В моем приложении MVC5 я использовал следующий подход, просто проверяя, существует ли пользователь в Active Directory
. Теперь я хочу использовать другой подход вроде: Я посылаю username
и password
к active directory
и если пользователь существует в нем, он должен возвращать некоторые active directory
данные пользователя, т.е. Name
, Surname
, Department
. Итак, как я могу определить такую аутентификацию в Controller
и web.config
?Аутентификация Active Directory с получением данных пользователя в MVC
web.config:
<configuration>
<system.web>
<httpCookies httpOnlyCookies="true" />
<authentication mode="Forms">
<forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="45" slidingExpiration="false" protection="All" />
</authentication>
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear />
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" connectionUsername="[email protected]" connectionPassword="MyPassword" />
</providers>
</membership>
</system.web>
<connectionStrings>
<!-- for LDAP -->
<add name="ADConnectionString" connectionString="LDAP://adadfaf.my.company:111/DC=my,DC=company" />
</connectionStrings>
</configuration>
Контроллер:
[AllowAnonymous]
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
if (!this.ModelState.IsValid)
{
return this.View(model);
}
//At here I need to retrieve some user data from Active Directory instead of hust a boolean result
if (Membership.ValidateUser(model.UserName, model.Password))
{
//On the other hand I am not sure if this cookie lines are enough or not. Should I add some additional lines?
FormsAuthentication.SetAuthCookie(model.UserName, false);
if (this.Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return this.Redirect(returnUrl);
}
return this.RedirectToAction("Index", "Issue");
}
TempData["message"] = "The user name or password provided is incorrect.";
return this.View(model);
}
Большое спасибо за ваш ответ. Я попытался применить это, но столкнулся с некоторыми проблемами, то есть «Имя« SearchPattern »не существует в текущем контексте» в классе SesssionUser. С другой стороны, CurrUser = false; линия не должна работать. Должны ли мы присваивать значение null вместо false? Поскольку Пользователь не является логическим типом и является классом домена. –
Thats класс, который я создал для моего компаньона, также класс 'User'. Мне не разрешено записывать его в стек. В методе 'ValidateUser()' вы должны поместить свою собственную проверку для пользователя против AD. Вы можете взглянуть на [codeproject] (http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C) – C0d1ngJammer
Я изменил код. Как я уже сказал, вам нужно создать свой собственный AD-Class, чтобы получить компанию, фамилию ... – C0d1ngJammer