Первоначально опубликовано на StackOverflow, размещены здесь, как это предлагается в комментариях SO.
Мне нужно защитить паролем некоторые действия в моем приложении, такие как загрузка / сохранение файлов, установка флажков и т. Д. Это стандартное приложение WinForms C # .Net 4.0, которое будет работать в Windows 7 в корпоративной сети.
Я собирался развернуть свою собственную очень простую систему (прочтите обфускацию с широко открытыми бэкдорами) с текстовым файлом пользователей / паролей / разрешений (хешированных и соленых), пока после некоторого поиска я не нашел то, что выглядит как дразняще простой подход , но мне не удается найти хороший учебник по ролям, не об ASP.NET.
Кто-нибудь знает одно или несколько руководств, которые показывают мне, как:
Role
или разрешение. Interface
и просто спросите Windows, есть ли у текущего пользователя разрешение ABC и не слишком заботится о том, как Windows это выяснила. Затем я могу сделать конкретную реализацию для каждого Local / Network / ActiveDirectory / и т. Д. вариант использования по мере необходимости (или если требуется ... поскольку я даже не знаю этого прямо сейчас).- read if interested, but not required to answer question
Просто чтобы убедиться, что я иду в правильном направлении, в основном мне нужно / хочу протестировать это на моем ПК для разработки, чтобы убедиться, что у конечного пользователя будет хороший опыт для моего клиента. Проблема в том, что в настоящее время они запускают сценарий автоматического входа в систему для каждого компьютера, на котором работает мое приложение, и есть несколько разных операторов, которые используют мое приложение в течение дня. Заказчик хочет защитить паролем определенные функции моего приложения и предоставлять ее только определенным операторам. У меня нет проблем с этим, поскольку я ожидал этого запроса некоторое время, я просто никогда раньше не программировал аутентификацию.
Я думаю, что стоит убедить моего клиента предоставить каждому оператору свою собственную сетевую учетную запись и назначить любые разрешения, которые они хотят, этому оператору или группе на случай, если им нужно кого-то уволить, изменить разрешения и т. Д. их, и они могут сгруппировать эти разрешения, как они считают нужным, на основе внутренних корпоративных политик, о которых мне действительно не следует беспокоиться (но будет, если мне придется свернуть свои собственные, поскольку их ИТ-отдел почти ничего не знает о мое заявление).
Насколько я могу судить, это также значительно облегчает мою жизнь, поскольку мне не нужно иметь дело с хэшированием паролей, шифрованием и т. Д. И просто определять, какая роль требуется для нажатия той или иной кнопки.
Я не знаю, каков нынешний «лучший метод» авторизации в .NET-приложении. Вот что я сделал много лет назад в веб-приложении, которое написал, чтобы переложить всю функциональность авторизации на саму операционную систему. (Это, вероятно, будет выглядеть как хитрый прием, написанный кем-то, кто сначала является системным администратором, а затем разработчиком.)
Я перечислил все разрешения в приложении и создал файлы в иерархии каталогов, которые будут выборочно доступны пользователям, которым назначена соответствующая роль (роли). (В файлах ничего не было - как вы увидите ниже, я просто проверил, может ли пользователь прочитать файл.)
Созданы группы Active Directory, в которых определены роли пользователей приложений.
Назначено разрешение на чтение файлов, созданных мной на предыдущем шаге, группам Active Directory.
Когда пользователь аутентифицировался в приложении (через Интернет), была сделана попытка получить доступ к каждому из файлов «разрешений». На основании того, что успешно / не удалось, приложение может определить назначенную пользователю «роль».
Для ИТ-отдела Заказчика изменение разрешений для приложения было вопросом изменения списков ACL для файлов «разрешений» (если в них нужно было внести радикальные изменения) или, что чаще, просто изменения членства в группах пользователей.
Мне понравился этот метод, потому что он очень хорошо обрабатывает все «крайние случаи» - членство во вложенных группах, участников безопасности из чужих лесов и т. Д. Это также приятно, потому что, если эти файлы разрешений были перемещены на машину Windows Server 2012, мое приложение внезапно получает новую функцию динамического контроля доступа «бесплатно».