Предложение/руководство по реализации аутентификации LDAP (Active Directory)

Постановка проблемы:

Я пытаюсь создать пользовательскую систему управления, которая потребует аутентификации и авторизации. Система должна иметь возможности для управления/создания/обновления/удаления пользователей, ролей, разрешений и групп.

Мое дизайнерское решение

Я планирую реализовать это самостоятельно с нуля и предоставлю аутентификацию и авторизацию следующим образом.

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

Авторизация: после аутентификации пользователя на основе групп пользователей и разрешений они могут получить доступ к запрошенным страницам на сайте.

Вопрос:

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

Я просмотрел apache shiro и spring security, которые обеспечивают функциональность LDAP, а также предоставляют возможности для управления/создания/обновления/удаления пользователей.

На данный момент я еще не решил, буду ли я использовать любой из них или напишу свой собственный.

Был бы признателен, если бы я мог получить подробный ответ о том, как действовать.

Примечание. Я новичок в LDAP, поэтому извините меня, если я использовал неправильную терминологию в отношении LDAP.


person user641887    schedule 31.08.2016    source источник


Ответы (2)


Безопасность — это серьезная сфера, в которой есть множество скрытых сложностей. Я бы определенно рекомендовал не реализовывать это самостоятельно. Поскольку вы упомянули Spring LDAP, я предполагаю, что вы работаете над проектом на основе Spring. Очевидным выбором в такой настройке будет отличный проект Spring Security.

person marthursson    schedule 01.09.2016
comment
спасибо, есть ли у весенней безопасности возможность разрешать/запрещать доступ к определенной странице на основе разрешений и ролей? Могу ли я определить группы в своей таблице и позволить Spring использовать эти группы для разрешения/запрета доступа к определенной странице? Могу ли я определить пользовательские роли в весенней безопасности? - person user641887; 01.09.2016
comment
Ах да, все это и многое другое :). Spring Security по умолчанию использует авторизацию безопасности на основе ролей. Из вашего вопроса неясно, чего вы хотите достичь, разделяя роли, разрешения и группы (вы думаете об авторизации на основе ACL?), но все полностью подключаемое, поэтому вы сможете использовать любую пользовательскую схему авторизации, которую вы можете захотеть (есть также встроенная поддержка авторизации на основе ACL). Ознакомьтесь со справочной документацией, это действительно хорошо! - person marthursson; 02.09.2016
comment
я имею в виду, что в документации spring говорится, что авторизация основана на ролях. Я хотел бы переопределить это и создать авторизацию на основе разрешений. У меня было бы 3 таблицы в моей схеме. пользователь, роли и разрешения, и я хотел бы авторизовать пользователей по разрешениям, а не по ролям. Это похоже на то, если у пользователя есть определенное разрешение на выполнение определенного действия или отображение определенной страницы, иначе этого делать нельзя. Таким образом, у меня есть собственный пользователь, таблица разрешений и ролей и использование весенней безопасности. Также у меня будет пользовательский интерфейс для редактирования, обновления и создания новых ролей, пользователей и разрешений. - person user641887; 02.09.2016
comment
В своей простейшей настройке авторизация в Spring Security основана на чем-то, что называется предоставленными полномочиями. В стандартной реализации это обычно роли, но они полностью подключаемые; все, что вам нужно сделать, это настроить количество предоставленных полномочий для каждого пользователя в соответствии с вашими конкретными потребностями (в вашем случае вместо этого заполните разрешения). Пользовательский интерфейс (и внутренняя инфраструктура) для редактирования/обновления и т. д. полностью отделены от инфраструктуры аутентификации/авторизации. Spring-ldap — полезный инструмент для упрощения серверной части. - person marthursson; 05.09.2016

Я бы рекомендовал НЕ реализовывать это самостоятельно, просто интегрировать с существующим API.

Раскрытие информации: я работаю на Stormpath (который обеспечивает именно это) и на Apache Shiro.

Кроме того, если ваше приложение должно поддерживаться LDAP, большинство настроек LDAP, которые я видел, поддерживают только операции чтения при интеграции с приложениями, поэтому вы можете пообщаться со своим администратором LDAP и узнать, ' вариант использования пользователя «управление» является жизнеспособным.

person Brian Demers    schedule 31.08.2016
comment
есть ли у spring security или apache shiro возможность поддерживать настраиваемые роли, разрешения и группы? Могу ли я контролировать доступ к определенной странице для пользователя на основе его разрешений, а не ролей в весенней безопасности или Широ? - person user641887; 01.09.2016
comment
Да, общий обзор разрешений Широ, которые, в свою очередь, можно настроить для защиты данного путь или с помощью программных подходов и подходов на основе аннотаций. - person Brian Demers; 05.09.2016