Аутентификация в нескольких OU в Active Directory - PullRequest
3 голосов
/ 28 мая 2010

Я использую поставщика членства Active Directory со следующей конфигурацией:

   <connectionStrings>
      <add name="MyConnString" connectionString="LDAP://domaincontroller/OU=Product Users,DC=my,DC=domain,DC=com" />
   </connectionStrings>

  <membership defaultProvider="MyProvider">
     <providers>
        <clear />
        <add name="MyProvider" connectionStringName="MyConnString"
             connectionUsername="my.domain.com\service_account"
             connectionPassword="biguglypassword"
             type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     </providers>
  </membership>

Это прекрасно работает, за исключением того, что ВСЕ мои пользователи должны быть в подразделении «Пользователи продукта», когда я действительно хочу, чтобы все мои пользователи были организованы в различные дочерние подразделения в рамках нашего подразделения «Пользователи продукта». Возможно ли это?

(Обратите внимание, что это частичный репост этого вопроса , но на вопрос, который я здесь задаю, ответа так и не было.)

1 Ответ

1 голос
/ 11 июля 2011

Аутентификация против AD выполняется на основе объема соединения, как я его не понимаю. По сути, это означает, что все в контексте строки подключения считается ...

если у вас есть соединение как:

LDAP: // domaincontroller / OU = Пользователи домена, DC = my, DC = домен, DC = com

После этого аутентифицируется любой пользователь, являющийся членом домена.

оттуда вы должны добавить поставщика ролей на основе токенов Windows и настроить его примерно так ...

<!-- use windows authentication -->
<authentication mode="Windows" />

<!-- use the Windows role provider -->    
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />

<!-- global authorization rules -->
<authorization>
    <allow roles="Domain Admins, Product Users"/>
    <deny users="*" />
</authorization>

Это блокирует приложение для использования только администраторами домена и пользователями в подразделении «Пользователи продукта» И всеми его дочерними объектами рекурсивно.

оттуда вы можете выполнять дальнейшие «контекстно-зависимые» проверки для других функций, например, ...

If(User.IsInRole("Product Admins"))
{
   // do something groovy
}
else
   throw new SecurityException();

Что это значит ...

Это означает, что у вас есть точный контроль над безопасностью логики вашего приложения на основе членства в группе пользователей домена, если пользователь находится в вашем домене, он будет аутентифицировать их, но может не авторизовать их (это зависит от конфигурации вашего поставщика ролей). ).

Аутентификация: идентификация пользователя.

Авторизация: Предоставление прав / доступа пользователю.

...