Помогите выбрать метод аутентификации

Мне нужно выбрать метод аутентификации для приложения, установленного и интегрированного в среду клиентов. Есть два типа сред - windows и linux / unix. Приложение основано на пользователях, никаких веб-материалов, чистая Java. Требование состоит в том, чтобы аутентифицировать пользователей, которые будут использовать мое приложение против пользовательской базы, предоставленной заказчиком. Это означает, что клиент устанавливает мое приложение, но использует своих пользователей для предоставления или запрета доступа к моему приложению. Типично, правда?

У меня есть три варианта для рассмотрения, и мне нужно выбрать тот, который был бы а) наиболее гибким для охвата наиболее распространенных современных сред и б) потребовал бы наименьших усилий, оставаясь при этом надежным и стандартным.

Вариант (1) - аутентифицировать локально управляющие учетные данные пользователя в некотором локальном хранилище, например файл. Затем клиент добавлял своих пользователей в мое приложение и проверял пароли. Просто, неуклюже, но сработает. Клиенты должны будут ударить каждого пользователя, которого они хотят предоставить доступ к моему приложению, используя некоторый пользовательский интерфейс, который мы должны будем предоставить. У меня много работы, головная боль заказчику.

Вариант (2) - использовать аутентификацию LDAP. Клиенты сообщали моему приложению, где искать пользователей, и я пройдусь по их каталогу, преобразовывая имена в имена пользователей и пытаясь выполнить привязку с помощью найденного пароля. Это лучший подход IMO, но более хрупкий, потому что мне придется пройтись по неизвестной структуре каталогов, и кто знает, будет ли это разрешено везде. Было бы труднее протестировать, поскольку существует множество реализаций LDAP, последнее, чего я хочу, - это утонуть в этом колдовстве.

Вариант (3) - использовать обычную аутентификацию Kerberos. Клиенты сообщали моему приложению, какую область (домен) и какой KDC (центр распределения ключей) использовать. В идеале эти два параметра были бы всем, что мне нужно было бы установить, в то время как клиенты могли бы использовать свои собственные инструменты администрирования для настройки домена и kdc. Мое приложение просто делегировало бы учетные данные пользователя этой третьей стороне (с использованием безопасности JAAS или Spring) и считало бы успехом, когда третья сторона довольна ими.

Лично я предпочитаю №3, но не знаю, с какими сюрпризами я могу столкнуться. Будет ли это полностью закрывать окна и системы * nix? Есть ли другой вариант для рассмотрения?


person Dima    schedule 08.05.2010    source источник


Ответы (1)


Пойдите с LDAP. Доступ очень прост, и единственный необходимый вам параметр - это сервер LDAP (и ActiveDirectory - один из них). Если пользователь существует и пароль правильный, он всегда сможет войти на сервер LDAP.

person Daniel    schedule 09.05.2010
comment
На самом деле это не единственный параметр ... как я считаю - мне нужно указать хост и порт сервера LDAP, учетные данные для просмотра каталога, местоположения, содержащие пользователей, и поля, соответствующие имени пользователя и паролю. Я что-то упускаю? - person Dima; 11.05.2010
comment
Просто для сравнения с простой аутентификацией Kerberos - для этого требуется только хост-порт KDC и область. Active Directory может аутентифицироваться с помощью Kerberos, как и большинство других серверов LDAP ... Какая польза от использования обхода LDAP? - person Dima; 11.05.2010
comment
Аутентификация - это только одна сторона медали. Далее идет авторизация, когда вы решаете, что авторизованный пользователь yue только что авторизовал. Я бы пошел с LDAP, чтобы получить групповые ассоциации пользователя, которые я бы сопоставил с группами моего собственного контроля доступа. - person Daniel; 11.05.2010