Поставщик членства в Active Directory ASP.NET и поставщик профиля SQL
В настоящее время я разрабатываю схему членства/профиля для нового проекта, над которым я работаю, и я надеялся получить от других информацию.
Проект представляет собой веб-приложение ASP.NET, и из-за короткого периода времени я пытаюсь использовать любые встроенные компоненты .NET, которые я могу. Сайт, вероятно, 5000 пользователей. Каждый пользователь будет иметь профиль, в котором пользовательские настройки и объекты будут сохраняться между посещениями.
Мне нужно использовать существующую Active Directory для аутентификации. Поскольку схема AD не может быть расширена для хранения новых полей, я должен хранить пользовательские настройки и объекты в другом хранилище данных. Мне также сказали, что ADAM, вероятно, не является возможным решением.
Я надеялся использовать Поставщик членства Active Directory для моей схемы аутентификации и поставщика профилей SQL в качестве хранилища данных профиля пользователя. Я бы предпочел не создавать настраиваемый поставщик профилей, но я не вижу, чтобы это создавало большую часть проблемы, если это необходимо.
Мне было интересно, возможно ли это даже возможное решение, и если да, то кому-то повезло с этим подходом.
Любые комментарии будут очень признательны.
Спасибо.
Ответы
Ответ 1
Во-первых, я никогда не делал этого сам.
Там действительно отличная серия (14!! частей) по всей теме членства в ASP.NET 2.0, роли и системы провайдеров профилей Скотта Митчелла в 4 Ребята из Роллы.
По моему мнению, вы должны иметь возможность настроить это поведение, которое вы ищете, используя в основном эти два раздела в вашем web.config:
<!-- configure Active Directory membership provider -->
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.3600, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<!-- configure SQL-based profile provider -->
<profile defaultProvider="SqlProvider">
<providers>
<add name="SqlProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="SqlProfileProviderConnection"
applicationName="YourApplication" />
</providers>
<!-- specify any additional properties to store in the profile -->
<properties>
<add name="ZipCode" />
<add name="CityAndState" />
</properties>
</profile>
Я бы подумал, что это должно работать: -)
Ответ 2
В дополнение к этому, как ответил Марк:
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.3600, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
вам также может потребоваться добавить
connectionStringName="ADService",
attributeMapUsername="sAMAccountName"
с соответствующей строкой соединения
<connectionStrings>
<add name="ADService" connectionString="LDAP://ServerIP" />
</connectionStrings>
Если вы используете .net 4.0, вам нужно будет заменить
Version=2.0.3600
с
Version=4.0.0.0
Итак, наконец,
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider"
connectionStringName="ADService"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
attributeMapUsername="sAMAccountName"/>
</providers>
</membership>
и поскольку он установлен по умолчанию, на него можно ссылаться как:
MembershipProvider provider = Membership.Provider;
Ответ 3
Спасибо за информацию, ее многое помогло. Кроме того, вместо установки поставщика по умолчанию с MembershipProvider provider = Membership.Provider;
вы можете установить его в теге членства.
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
Я также написал небольшую информацию о том, как загрузить и загрузить проект Visual Studio и источник, сконфигурированный для использования AspNetActiveDirectoryMembershipProvider.
Аутентификация на основе форм ASP.NET - с помощью AspNetActiveDirectoryMembershipProvider
Ответ 4
Я использую Visual Studio 2012 и стараюсь делать это, но отображается ошибка:
To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".
Итак, я обнаружил, что необходимо внести несколько изменений в форму входа по умолчанию на VS2012 с MVC 4 и инфраструктурой сущности следующим образом:
в файле "AccountController.cs"
в "общедоступном элементе входа ActionResult (модель LoginModel, строка returnUrl)"
Измените
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
для
if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
в "public ActionResult LogOff()"
Измените
WebSecurity.Logout();
для
FormsAuthentication.SignOut();
и добавьте следующее: FormsAuthentication.SetAuthCookie(model.UserName, false);
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}