Подходы и рекомендации для нескольких методов аутентификации пользователей ОС

2

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

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

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

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

  • 0
    Что вам нужно для аутентификации и почему? Это для приложения с поддержкой сети, или вы работаете только локально?
  • 0
    Я работаю в системе, которая должна проверить правильность аутентификации имени пользователя / пароля, указанного во входящем сообщении, и пользователь является членом определенной группы. Это делается для того, чтобы определить, допустима ли информация, запрошенная в оставшейся части сообщения, для этого конкретного пользователя. Моя проблема вступает в игру с необходимостью сделать это для Windows, Linux и MacOSX и моим желанием не писать несколько раз.
Показать ещё 1 комментарий
Теги:
authentication

2 ответа

1

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

  • 0
    Отличная идея, и я демонстративно буду следовать этой рекомендации. Мой вопрос был более сфокусирован на том, какие механизмы доступны для аутентификации пользователей в различных операционных системах и как другие решают проблему аутентификации пользователей, не зная, как базовая ОС настроена для аутентификации. Например, (я считаю) в Windows API LogonUser будет аутентифицировать пользователей локально и по сети в ActiveDirectory, но не в LDAP. Как все остальные подойдут для аутентификации пользователей в нескольких операционных системах и в разных механизмах аутентификации?
0

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

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

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

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

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

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

  • 0
    Я понимаю вашу точку зрения, что если сделать это неправильно, это приведет к большей угрозе безопасности системы, однако я не вижу такого подхода, отличного от удаленного входа (VCN, RemoteDesktop, ssh). Я думаю, что любой из этих подходов (использование системной аутентификации или аутентификации приложения) может иметь значительные последствия для безопасности. [Обратите внимание, что я не согласен с вами напрямую, а скорее стараюсь не допустить дальнейшего обсуждения этой темы.] Кстати, я шифрую свои клиент-серверные связи через SSL.
  • 0
    Ваш подход похож на другие системы, и я не говорю, что вы неспособны сделать это должным образом, но ошибки случаются (вы все-таки используете Windows;). Иногда это нужно делать, но ssh - отличный пример. Разница в том, что в коде используется исчерпывающий аудит. Это все еще отдельная проблема от вашего реального вопроса, и я добавлю новую опцию, которая только что пришла мне в голову.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню