2008-11-27 4 views
9

У меня есть требование к проекту, когда мне нужно пройти аутентификацию с ActiveDirectory в удаленном/отключенном приложении WPF.Аутентификация и GetRoles пользователей ActiveDirectory в отключенном приложении WPF через MemberhipProvider

Возможно, есть несколько способов сделать это, но какой подход лучше всего использовать при использовании ActiveX Directory MembershipProvider?

мне нужно:

  1. Аутентифицировать, что пользователь не существует.
  2. получить группы пользователей и их роли.

Это должно произойти из удаленного места, за пределами сети, в которой находится Active Directory.

ответ

15

В приложении WinForms или WPF вы можете воспользоваться «Client Application Services» (спасибо MS за очень общее название, поиск помощи сейчас очень болезненный!).

Это позволяет подключиться к службе WCF, которая может проверять логины. В приведенной выше ссылке есть пошаговое руководство, в котором показано, как легко заставить все это работать, после того как у вас есть рабочее приложение, вы можете изменить свою конфигурацию, чтобы указать на другой членствоProvider и/или RoleProvider.

Стоит отметить, что готовое решение включает в себя MemberhipProvider с именем ActiveDirectoryMembershipProvider, но для Active Directory нет RoleProvider.

Если вам требуется возможность создавать роли (или группы), и вы работаете с .NET 4.0, то вы можете воспользоваться новым API Active Directory, который упрощает все, а именно System.DirectoryServices.AccountManagement. Для самых основных членства и услуг Роли вы хотите иметь следующее, чтобы создать свой собственный основной MembershipProvider и RoleProvider:

  • MembershipProvider.ValidateUser() - следует использовать PrincipalContext.ValidateCredentials()
  • RoleProvider.GetAllRoles() - используйте новый GroupPrincipal() в качестве источника для нового PrincipalSearcher()
  • RoleProvider.IsUserInrole() - используйте UserPrincipal. FindByIdentity(), чтобы получить пользователя, используйте GroupPrincipal. FindByIdentity(), чтобы получить группу, затем используйте метод IsMemberOf() для пользователя, чтобы узнать, являются ли они членами группы.

Вы можете реализовать как можно меньше API или API-интерфейса, в этом случае вы должны найти все, что вам нужно, в новом пространстве имен AccountManagement.