мой ответ, вероятно, зависит от ответа на этот вопрос: Это корпоративное приложение, которое живет в сети с Active Directory?
ЕСЛИ ответ «да», то вот шаги, которые я бы предоставил:
1) Создайте глобальные группы для вашего приложения, в моем случае у меня была группа APPUSER и группа APPADMIN.
2) Обеспечьте доступ к вашему SQL-серверу в режиме MIXED AUTHENTICATION, а затем назначьте ваши группы APPUSER в качестве входа SQL SERVER для вашей базы данных с соответствующими правами CRUD для ваших баз данных и убедитесь, что что вы обращаетесь к СЕРВЕРУ SQL с помощью Доверенное соединение = True в строке подключения.
На этом этапе ваше хранилище AD будет отвечать за аутентификацию. Поскольку вы получаете доступ к приложению через ДОВЕРЕННОЕ СОЕДИНЕНИЕ, оно передает идентификатор любой учетной записи, на которой запущено приложение, на SQL Server.
Теперь, для АВТОРИЗАЦИИ (то есть, сообщая вашему приложению, что разрешено делать зарегистрированному пользователю), достаточно просто запросить AD для получения списка групп, членом которых является зарегистрированный пользователь. Затем проверьте соответствующие имена групп и создайте свой пользовательский интерфейс на основе членства таким образом.
Таким образом работают мои приложения:
- При запуске приложения учетные данные основаны на вошедшем в систему пользователе, это основной аспект аутентификации (т. Е. Они могут войти в систему, поэтому они существуют)
- Я получаю все группы для идентификатора Windows, о котором идет речь
- Я проверяю стандартную группу пользователей - если эта группа не существует для рассматриваемого удостоверения Windows, то это АВАРИЙНЫЙ Сбой аутентификации
- Я проверяю группу пользователей ADMIN - поскольку она существует в группах пользователей, я изменяю пользовательский интерфейс, чтобы разрешить доступ к компонентам администрирования
- Отображение пользовательского интерфейса
Затем у меня есть либо объект PRINCIPLE с определенными правами / и т. Д., Либо я использую глобальные переменные, к которым у меня есть доступ, для определения соответствующего пользовательского интерфейса при создании моих форм (т. Е. Если мой пользователь не является членом группы ADMIN) тогда я бы спрятал все кнопки УДАЛИТЬ).
Почему я это предлагаю?
Это вопрос развертывания.
По моему опыту, большинство корпоративных приложений развертываются сетевыми инженерами, а не программистами, поэтому наличие аутентификации / авторизации в качестве ответственности AD имеет смысл, так как именно туда приходят парни из сети, когда вы обсуждаете аутентификацию / Авторизация.
Кроме того, при создании новых пользователей для сети сетевой инженер (или тот, кто отвечает за создание новых сетевых пользователей) более склонен к тому, чтобы не забывать выполнять групповые назначения, пока они находятся в AD, чем тот факт, что они должны зайдите в десяток приложений, чтобы разобрать присвоения авторизации.
Это помогает в лабиринте разрешений и прав, которые должны быть предоставлены новым сотрудникам, или тем, кто покидает компанию, должно быть отказано, и он поддерживает аутентификацию и авторизацию в центральном репозитории, где он находится (то есть в AD @ Domain Controller). уровень).