Выбор API для авторизации на основе AD в приложении Windows - PullRequest
1 голос
/ 25 июля 2011

Мы создаем приложение расширенного клиента (WPF), которое использует информацию о вошедшем в систему пользователе для аудита и авторизации.

Я пытаюсь выбрать между тремя разными API для доступа к этой информации:

  • System.Management классы (запросы WMI)
  • System.Security.Principal классов (WindowsIdentity и т. Д.)
  • System.DirectoryServices.AccountManagement классы (UserPrincipal и т. Д.)

Варианты использования:

  • Получить текущее имя пользователя
  • Получить всех пользователей в группе X
  • Получить все группы, к которым принадлежит текущий пользователь
  • Является ли текущий пользователь в группе X?
  • Является ли пользователь X в группе Y?

У меня есть некоторые доказательства концепции для каждого метода, но я хотел бы, чтобы некоторые объективные причины использовали один или другой. Буду признателен за факты по следующим аспектам:

  • Тестируемость
  • Performance
  • Удобство использования
  • Простота развертывания
    • В испытании / производстве
    • На компьютерах разработчика

1 Ответ

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

WMI
хорошо в отношении тестируемости, потому что есть много (нативных / .NET / script ...), которые могут быть использованы для тех же задач, сравнения результатов и т. д. Что по моему опыту может быть довольно сложным, так это развертывание / настройка в отношении безопасности / связи и т. Д.

System.DirectoryServices.AccountManagement
По моему опыту очень прост в использовании и развертывании ... для компьютера разработчика вы можете (жертвуя некоторыми более тонкими аспектами) использовать тот же код и при необходимости протестировать его с локальными пользователями / группами. Что касается производительности, этого обычно более чем достаточно, но его можно немного изменить в зависимости от ваших потребностей (специальные запросы AD в сравнении с постоянным соединением и т. Д.). Если когда-нибудь возникнет необходимость не только запрашивать, но и создавать / изменять пользователей / группы и т. Д., Это легко сделать ...

Я не использовал System.Security.Principal много, поэтому не могу много говорить об этом ... более актуальная часть .NET System.DirectoryServices.AccountManagement и работает очень хорошо: -)

...