Подтвердить что ты не робот

Поставщик членства в Active Directory ASP.NET и поставщик профиля SQL

В настоящее время я разрабатываю схему членства/профиля для нового проекта, над которым я работаю, и я надеялся получить от других информацию.

Проект представляет собой веб-приложение ASP.NET, и из-за короткого периода времени я пытаюсь использовать любые встроенные компоненты .NET, которые я могу. Сайт, вероятно, 5000 пользователей. Каждый пользователь будет иметь профиль, в котором пользовательские настройки и объекты будут сохраняться между посещениями.

Мне нужно использовать существующую Active Directory для аутентификации. Поскольку схема AD не может быть расширена для хранения новых полей, я должен хранить пользовательские настройки и объекты в другом хранилище данных. Мне также сказали, что ADAM, вероятно, не является возможным решением.

Я надеялся использовать Поставщик членства Active Directory для моей схемы аутентификации и поставщика профилей SQL в качестве хранилища данных профиля пользователя. Я бы предпочел не создавать настраиваемый поставщик профилей, но я не вижу, чтобы это создавало большую часть проблемы, если это необходимо.

Мне было интересно, возможно ли это даже возможное решение, и если да, то кому-то повезло с этим подходом.

Любые комментарии будут очень признательны.

Спасибо.

4b9b3361

Ответ 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);
    }