На каком уровне реализовать RBAC в веб-приложении?
У меня есть корпоративное приложение, состоящее из EJB, и у меня также есть некоторые REST API. Также у меня есть некоторые другие сервисы, которые используют мои bean-сервисы. Мои EJB-компоненты снабжены аннотациями на основе ролей, т. Е. RolesAllowed
, DeclareRoles
, У меня также есть несколько REST API в моем приложении, где мне нужно иметь контроль доступа для нескольких ресурсов и иметь некоторые другие API с неограниченным доступом.
В таком случае, где должен быть реализован RBAC? На уровне бина или на уровне API REST?
1 ответ
Вот некоторые элементы ответа:
- Прежде всего, попытайтесь определить свой уровень контроля доступа настраиваемым, отделенным способом. Использование таких сред, как /questions/tagged/spring-security, jaas или xacml, - отличный путь вперед. Это называется внешней авторизацией.
- Во-вторых, подумайте, что для вас важнее всего: это функциональность, предоставляемая через REST? Это бобы? Это данные? Как правило, вы хотите защитить как можно ближе к тому, что для вас важнее всего.
- В-третьих, имеет ли смысл защищать в двух местах одновременно? Часто так и будет. Например, вы хотите защитить свои данные (например, конфиденциальные банковские данные). В то же время вы хотите контролировать доступ к процессам (т.е. к функциям, предоставляемым через ваш API, будь то REST или что-то еще).
В конечном счете, самое важное, что вы централизуете свою логику авторизации в одном репозитории: это может быть набор ролей и разрешений (как определено в rbac) или набор политик (как определено в abac). То, что вы затем делаете на своем уровне API и / или на своем уровне EJB, - это обращение к этому централизованному местоположению для проверки авторизации.
Взгляните на эту диаграмму (которая основана на xacml. Она показывает, что вы можете применять свои проверки авторизации там, где сочтете это необходимым, если вы вызываете внешнюю точку принятия решения или когда вы последовательно управляете своими ролями в разных системах: