Простое имя пользователя для входа с поставщиком членства в Active Directory - PullRequest
3 голосов
/ 25 февраля 2012

Я использую Active Directory для аутентификации через ActiveDirectoryMembershipProvider в одном из моих проектов ASP.Net.

Я успешно подключаюсь к этой строке подключения LDAP:

LDAP://server/DC=mydomain,DC=com

но остаются две проблемы:

  1. вызов Membership.GetUser("moravej") возвращает значение Null, тогда как вызов Membership.GetUser("moravej@mydomain.com") возвращает правильный объект. Есть ли способ решить это? Я не хочу, чтобы пользователи использовали свое полное имя, когда AD прозрачна для них. Также я предпочитаю не менять свои коды для объединения @mydomain.com с введенными значениями (из-за большого количества необходимых изменений)

  2. Я хочу, чтобы участники могли использовать всех пользователей AD для входа в систему. (он делает это в этом случае), но я хочу, чтобы все пользователи, которые будут созданы моим приложением, перешли в подразделение CRM. Если для строки подключения установить LDAP://server/OU=CRM,DC=mydomain,DC=com, то при вызове Membership.GetUser() для пользователей, не входящих в это подразделение, возвращается ноль.

Есть ли способ решить эти проблемы?

Заранее спасибо

1 Ответ

3 голосов
/ 25 февраля 2012

Согласно этой странице здесь , вы можете определить, использовать SAMAccountName для входа в систему - с некоторыми настройками:

Конфигурация по умолчанию для ActiveDirectoryMembershipProvider использует основные имена пользователей (UPN) для сопоставления имен, как показано в следующий пример.

attributeMapUsername="userPrincipalName"

Из-за этого все имена пользователей должны иметь формат UserName @ DomainName; например: mary@testdomain.com или steve@testdomain.com.

Но вы можете изменить это - см. Параграф ниже:

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

attributeMapUsername="sAMAccountName"

В этой конфигурации вы можете использовать простые имена пользователей, например: Мэри или Стив.

Кажется, это то, что вы ищете - верно?

Таким образом, в вашем web.config должна быть запись конфигурации (например, используйте ваши имена строк подключения и т. Д. - это всего лишь пример!)

<system.web>
<membership defaultProvider="MyADMembershipProvider">
   <providers>
      <add name="MyADMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider,
                 System.Web, Version=2.0.0.0, Culture=neutral,
                 PublicKeyToken=b03f5f7f11d50a3a"
           connectionStringName="ADConnectionString"
           attributeMapUsername="sAMAccountName"/>  <== this is the magic to turn ON
  </providers>
</membership>
</system.web>

Для проблемы # 2: если вы хотите, чтобы всех пользователей, затем установите строку подключения для поставщика членства на LDAP://server/DC=mydomain,DC=com, чтобы он подключался к корневому каталогу вашего домена AD.

...