Подтвердить что ты не робот

Высокоуровневая система безопасности Java

Какую инфраструктуру безопасности вы используете в своих проектах Java?

Я использовал Spring Security и Apache Shiro, и они оба выглядят незрелыми.

Spring Недостатки безопасности:

  • нет встроенной поддержки разрешений;
  • Невозможно явно использовать код Java (иногда это необходимо);
  • слишком много внимания уделяется классическим (не AJAX) веб-приложениям.

Недостатки Apache Shiro:

  • ошибки в финальной версии (например, проблема с интеграцией Spring);
  • нет поддержки OpenID и некоторых других широко используемых технологий;
  • сообщили о проблемах с производительностью.

Также отсутствует документация для обоих.

Возможно, большинство реальных проектов разрабатывают собственные рамки безопасности?

4b9b3361

Ответ 1

Что касается Apache Shiro:

Я не уверен, почему вы указали то, что сделали:

  • Каждый проект в мире имеет проблемы с выпуском ошибок. Однако большой ключ заключается в том, что команда Shiro реагирует и исправляет их как можно скорее. Это не то, чтобы оценить структуру, в противном случае вы бы устранили все рамки, включая все, что вы пишете сами.
  • Поддержка OpenID будет выпущена вскоре в Shiro 1.2 - может быть, через месяц?.
  • Какие проблемы с производительностью? Никто никогда не сообщал о проблемах производительности в списке разработчиков, тем более, что поддержка кеширования в Сиро является широкой и первоклассной. Без разъяснений или ссылок это встречается как FUD.
  • Документация теперь действительно хороша на самом деле - одни из лучших в Open Source, которые я видел в последнее время (она была переработана 2 недели назад). У вас есть конкретные примеры того, где это не подходит для вас?

Я хотел бы помочь, но ваши проблемы - это обобщения, которые не поддерживаются ссылками или конкретными примерами. Возможно, вы могли бы представить конкретные вещи, которые нужны вашему проекту, которых вы не смогли достичь до сих пор?

Apache Shiro по-прежнему является самой гибкой и простой в понимании инфраструктурой безопасности для Java и JVM-языков - я сомневаюсь, что вы найдете лучше.

Но, прежде всего, и я имею в виду это со всей искренностью, пожалуйста, не пишите свою собственную инфраструктуру безопасности, если вы не планируете вкладывать в нее нелепое количество времени. Почти каждая компания, которую я когда-либо видел, которая пытается это сделать, терпит неудачу. Очень сложно "правильно" (и защищаться). Поверьте мне - после того, как я написал 8 лет, я абсолютно уверен в этом:)

В любом случае, не стесняйтесь присоединяться к списку пользователей Shiro, и вы обязательно обнаружите, что сообщество счастливо и готово работать над любыми проблемами, которые могут возникнуть у вас. Вы обнаружите, что мы заботимся о людях, которые задают вопросы и делают все возможное, чтобы помочь.

НТН!

Ответ 2

Мои текущие проекты используют SpringSecurity и включают в себя выполнение всех трех вещей, которые, по вашему мнению, являются недостатками SpringSecurity:

  • Проекты реализуют мелкозернистые правила доступа, которые выходят за рамки простых ROLE, и по-разному включают состояние объектов домена, дополнительные параметры запроса и т.д. Они реализуются с использованием пользовательских "объектов политики доступа", которые вызываются в моих контроллерах MVC. Тем не менее, проверки проверки доступа возвращаются SpringSecurity, бросая соответствующее исключение. (Они могли быть реализованы в качестве стандартных перехватчиков уровня SpringSecurity, но проверки обычно включают в себя проверку объектов домена.)

  • Проекты поддерживают как доступ к Интернету, так и AJAX, и имеют дело с нарушениями доступа по-разному для обоих случаев. Это делается путем написания некоторых пользовательских компонентов точки входа для проверки подлинности SpringSecurity, которые выбирают между различными типами аутентификации в зависимости от URL-адреса запроса и т.д.

Другими словами, это можно сделать...

Сказав это, я согласен с вами по нескольким пунктам:

  • Нелегко подключить эту вещь. Я продолжал работать в блокпосты при использовании элемента <http> и связанного с ним конфигуратора. Как... вы хотите, чтобы он использовал другую версию компонента X. Но для этого вам нужно также заменить Y, Z, P и Q.

  • Документация действительно разрежена и не полезна, если вы пытаетесь сделать что-то необычное.

Ответ 3

Андрей, я думаю, этот ответ приходит слишком поздно, чтобы быть полезным для вас; он предназначен для тех, кто приземляется на эту тему позже, и я надеюсь, что это поможет.

Моя компания недавно выпустила в качестве открытого источника OACC, усовершенствованную инфраструктуру безопасности приложений Java. OACC предназначен для систем, требующих до степени детализации безопасности на уровне объекта.

OACC предоставляет высокопроизводительный API, который предоставляет службы авторизации на основе разрешений. В двух словах, OACC позволяет вашему приложению обеспечивать безопасность, отвечая на вопрос: "Сущность" A разрешено выполнять действие "p для объекта" B?

Одна из ключевых абстракций в OACC - это ресурс. Ресурс служит заполнителем в OACC для объекта в домене приложения, который должен быть защищен. Как субъекты (например, пользователи, процессы), так и защищенные объекты (например, документы, серверы) представлены как ресурсы в OACC. Объекты домена приложения, которые являются субъектами или защищены, просто сохраняют идентификатор ресурса в соответствующем ресурсе.

Абстракция ресурсов позволяет OACC, в отличие от других основных систем безопасности, предоставлять богатый API, который управляет разрешениями между ресурсами. OACC сохраняет отношения безопасности в таблицах РСУБД (в настоящее время поддерживаются DB2, Oracle, MS-SQLServer и PostgreSQL).

Для получения дополнительной информации посетите веб-сайт проекта: http://oaccframework.org

Ответ 4

Мы используем многоуровневую безопасность в одном из наших проектов. Слои следующие:

  • HTTPS как протокол (Apache-AJCConnectors-TomcatServlets)
  • Только двоичные объекты, передаваемые между клиентом и сервлетом
  • Отдельные элементы в переданных объектах (в любом случае) зашифровываются
  • Ключ шифрования является динамическим, настроенным во время первоначального подтверждения связи, действительным для 1 сеанса

Концептуально безопасность состоит из ключа шифрования, алгоритма шифрования и данных, на которые он применяется. Мы гарантируем, что более 1 из 3 никогда не передаются одновременно во время связи. Надеюсь, это поможет. С уважением, - М.С.