Подходы и рекомендации для нескольких методов аутентификации пользователей ОС - PullRequest
2 голосов
/ 26 мая 2009

Я ищу рекомендации о том, как аутентифицировать комбинацию пользователя и пароля и проверять связь между группами в разных операционных системах. По сути, у меня есть приложение C #, которое работает как в MS Visual Studio C #, так и в Mono C #, и мне нужно добавить механизм аутентификации для поддержки Windows, Linux и MacOSX.

Для Windows я написал быстрое взаимодействие на C # для использования только API-интерфейсов LogonUser для Windows. Это работает хорошо, но не будет работать для систем, отличных от Windows. Моей конечной целью является запуск одинакового набора кода на всех платформах (Windows, Linux и MacOSX) с минимально возможным зависящим от ОС #ifdefing.

Одно замечание - я отчаянно пытаюсь использовать собственные учетные записи пользователей ОС. Я предпочитаю не поддерживать свой собственный магазин учетных записей пользователей.

Любые мысли или рекомендации по подходам, методам аутентификации пользователей и т. Д. Приветствуются.

Ответы [ 2 ]

1 голос
/ 26 мая 2009

Я не уверен, как работает аутентификация на linux и mac, но первое, что приходит мне в голову, это реализовать интерфейс IAuthenticator и иметь классы аутентификаторов, специфичные для ОС. Затем вы можете переключиться на соответствующий класс вручную с помощью Dependecy Injection или, возможно, динамически во время выполнения ... но каким-то образом ваше приложение должно быть в состоянии определить, на какой ОС оно в данный момент работает.

0 голосов
/ 26 мая 2009

Каждая система по-разному обрабатывает локальную аутентификацию. Как упоминал @Darnell, вам, вероятно, потребуется написать интерфейс для вашей аутентификации и скрыть системный бэкэнд.

Если вам нужно иметь одинаковые учетные записи пользователей в разных системах, ldap для информации о пользователе и kerberos для аутентификации - это единственный полностью поддерживаемый кроссплатформенный способ справиться с этим.

Если не считать "керберизации" вашего приложения и настаивать на том, что оно работает только в эквивалентной среде, универсального метода аутентификации не существует. Кроме того, LDAP действительно является единственным переносимым способом запроса групповой информации.

Более простой (более переносимый) вариант может заключаться в использовании какого-либо предварительно общего ключа. Таким образом, пользователь авторизует только вашу программу, предоставляя ей ключ для подписи сообщений. Проверка сообщения по соответствующему ключу пользователя даст вам знать, что а) пользователь существует локально, и б) сообщение исходит из источника, который пользователь разрешил. У вас все еще есть проблема с универсальным групповым поиском, но вам, вероятно, нужно сделать это самостоятельно, если вы не можете положиться на ldap.

Примечание: я все еще должен подчеркнуть следующее

Я настоятельно рекомендую не использовать чей-либо пароль в вашем сообщении, даже если это требует от вас ведения собственной базы данных пользователей / паролей. Вы обойдете локальную парадигму безопасности и откроете систему для большего количества угроз безопасности. Это еще более важно, если система использует kerberos / ActiveDirectory, где были приняты большие меры, чтобы гарантировать, что пароль пользователя никогда не передается по проводам. Используя СУБД в качестве примера - большинство из них не связаны с локальной базой данных пользователей (по крайней мере, по умолчанию) и реализуют свои собственные механизмы аутентификации пользователей. Посмотрите, как работает защита в MySQL или PostgreSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...