2009-02-24 5 views
4

Я хотел бы использовать LDAP-сервер (возможно, Apache directory) для управления входами и учетными данными для приложения. Время от времени приложение должно работать в автономном режиме (на ноутбуке) без подключения к LDAP-серверу.Как использовать учетные данные LDAP в автономном режиме?

Каков наилучший способ репликации локальных учетных данных?

Я уже думал о том:

  • Использование Mitosis для репликации сервера LDAP на ноутбуке.

    Но это было бы довольно «тяжелое» и сложное решение. Более того, Митоз, похоже, еще не закончен.

  • Экспорт учетных данных в виде файла LDIF, который может храниться на ноутбуке.

    Но мне нужен способ проверить, действительно ли файл LDIF поступает с сервера LDAP (файл должен содержать вид подписи). Кроме того, я хотел бы отказаться от файлов LDIF, которые не обновляются более недели. Было бы неплохо, если бы я мог избежать выполнения подписи и проверки возраста.

Другие идеи или инструменты, которые могут мне помочь?

Edited Edit: Я посмотрел на Kerberos, потому что documentation of the Java-Kerberos-API, кажется, говорят, что можно использовать кэшированные билет в локальном кэше, и я подумал, что это может быть решением для меня. Кроме того, Kerberos можно добавить в качестве плагина в Apache Directory. Но кеш Kerberos хранит дешифрованные билеты (направленные на совместное использование их с другими приложениями). Мне понадобится зашифрованная версия билета, чтобы проверить пароль пользователя во время автономной сессии. Вывод: Kerberos не предлагает простого решения моей проблемы.

+0

Обязательно ли пользователь, который еще не вошел в систему до того, как ноутбук перейдет в автономный режим, сможет войти в систему после выхода из портативного компьютера? – vladr

+0

Возможно, будет нормально, если пользователь должен войти в систему один раз в сети, прежде чем сможет войти в автономный режим. – Name

ответ

1

Вот решение, которое я решил использовать (я уже описал его в редактировании на мой вопрос, но я хотел бы иметь возможность принять ответ «закрыть» вопрос):

Как Я не нашел другого решения, я решил использовать LDIF-экспорт, добавить отметку времени в качестве комментария в начале файла и затем подписать файл. Чтобы подписать файл, я вычисляю хэш-значение (SHA-1) файла + секретный ключ. Подпись добавляется как комментарий в начале файла. Чтобы проверить подпись, я удаляю первую строку подписанного файла и пересчитываю хэш-значение.

4

Зная, что это будет, вероятно, хорошо, если пользователь должен войти в один раз в Интернете, прежде чем быть в состоянии войти в автономном режиме, рассмотрим следующий алгоритм:

  1. пользователь предоставляет приложение с (username + password)
  2. приложение пытается связаться LDAP для аутентификации
    • Работает онлайн? (Например, соединение успешным)
      1. приложение проверяет подлинность против LDAP с использованием (username + password)
        • аутентификации успешной?
          1. приложение хранит или обновленияhash(password) как (cached_credentials) для (username) в местной безопасного хранения
          2. приложений протекает как аутентифицирован[[STOP]]
        • Ошибка аутентификации?
          1. применение протекает как не прошедшие проверку подлинности (неверных учетных данных) [[STOP]]
    • работает в автономном режиме? (Например, ошибка сети)
      1. попытки применения извлечения (cached_credentials) для (username) из локального безопасного хранения
        • (cached_credentials) существует более чем AND недавно (1 week)?
          1. приложение сравнивает (cached_credentials) против hash(password)
            • матч?
              1. приложений протекает как аутентифицирован[[STOP]]
            • не подходит?
              1. применение протекает как не прошли проверку подлинности (неверных учетных данных) [[STOP]]
        • (cached_credentials) не существует OR меньше, чем недавно (1 week)?
          1. применение протекает как без аутентификации (ошибка сети) [[STOP]]

Это (или был, IIRC), на путь, та же самая модель, используемая Windows NT + для аутентификации пользователя иона против контроллеров домена. При входе в систему предпринимается попытка пройти аутентификацию против контроллера домена и создать или обновить локальную (кэшированную) версию профиля пользователя. Если контроллер домена недоступен, пользователю предлагается приступить к проверке подлинности с учетными данными, захваченных в локальных (кэшируется) профиля (если таковой существует.)


EDIT

  • Да , это по духу, то же решение, что и копирование ldif-файла локально, за исключением того, что вам не нужно разбирать ldif, когда вы в автономном режиме. :)
  • Понятно, что вы можете хранить в своем кэше любые дополнительные атрибуты (разрешения и т. Д.)
  • Также понятно, что «безопасное хранилище» по меньшей мере подписано. :) Вы можете сделать это достаточно легко с помощью хэша SHA-1 и секретом, или вы можете использовать полнофункциональные криптографические провайдеры, доступные на вашей платформе (или в Java, если используете Java.) Вам не нужно долго склеивать его поскольку никакая секретная информация не хранится внутри.
+0

Спасибо, что написал детальный алгоритм. Но на самом деле речь идет о том же решении, что и в файле ldif. Рассмотрим файл ldif как «локальное безопасное хранилище». Мне все равно нужно управлять этим локальным безопасным хранилищем (подписать или скрыть его, чтобы избежать подделки и добавить к нему отметку времени). – Name

+0

Точность: учетные данные включают больше, чем имя пользователя + пароль. Они также включают список прав пользователя. Хэшированного пароля недостаточно, чтобы избежать подделки, потому что пользователь может просто добавить новое право в свой собственный список, если «локальное безопасное хранилище» не подписано. – Name

+0

Да, я знаю. :) Смотрите мое обновление. Это действительно тривиально, чтобы защитить ваше хранилище с помощью хэша sha-1. – vladr

 Смежные вопросы

  • Нет связанных вопросов^_^