Авторизация только с использованием Spring-Security (или) Spring

У меня есть вопрос, связанный с авторизацией и весенней безопасностью. Чтобы реализовать проверки авторизации в одной из моих служб (в среде сервис-ориентированной архитектуры), я пытался выяснить, могу ли я использовать Spring-Security. Просматривая документацию Spring Security, я прочитал здесь что Spring Security использует Spring AOP для внутреннего использования.

Ссылка: Вы можете выбрать выполнение авторизации метода с помощью AspectJ или Spring AOP или выполнить авторизацию веб-запроса с помощью фильтров. Вы можете использовать ноль, один, два или три этих подхода вместе. Основной шаблон использования заключается в выполнении некоторой авторизации веб-запросов в сочетании с некоторой авторизацией вызова метода Spring AOP на уровне служб.

Мы уже используем Spring AOP в реализации наших сервисов. В моем случае запросы, которые будут поступать в мою службу RESTful, будут содержать настраиваемый объект токена, который следует обрабатывать для выполнения проверок авторизации.

Исходя из этого, я хотел бы понять, могу ли я просто использовать Spring и создать Aspect для перехвата входящего запроса, извлечения и обработки связанного (созданного на заказ) токена и продолжения/отклонения запроса на основе результата? Нужна ли мне spring-security, учитывая, что канал связи уже защищен с помощью HTTPS?

Спасибо,

СГСИ


person sgsi    schedule 11.02.2014    source источник


Ответы (1)


Для аналогичной ситуации мы сделали следующее давным-давно:

  1. Использовал фильтр HTTP для извлечения токена из заголовков HTTP для каждого запроса.
  2. Сохранил извлеченный заголовок в контексте потока.
  3. Добавлен аспект, связанный с вызовами методов службы для проверки контекста потока для токена.

Эта стратегия хорошо сработала для нас. В течение последних многих лет я использую Spring Security, так как он имеет более проверенную и комплексную реализацию для таких проблем.

Если вы хотите написать собственную реализацию передачи токенов, вы можете проверить исходный код класса Spring Security SecurityContextHolder, который предоставляет несколько способов передачи информации о безопасности в потоке выполнения.

person manish    schedule 12.02.2014
comment
Но какую дополнительную выгоду принесет использование Spring Security, если: (1) я буду обрабатывать токен и принимать решение о том, идти или не идти (2) Spring Security создаст фильтр для обработки токена, и я все равно могу это сделать это с аспектом Spring Around. Обратите внимание, что аутентификация уже установлена, и для авторизации мне просто нужно обработать наш пользовательский токен и принять решение, прежде чем он попадет в doPost(). Что Spring Security даст мне больше, чем Spring может не дать? - person sgsi; 13.02.2014
comment
Я полностью согласен с тем, что Spring Security может не дать вам никаких дополнительных преимуществ для описанного вами варианта использования. Я согласился с вами в том, что вы могли бы использовать аспект для обеспечения выполнения требований авторизации, которые вы описали. Я упомянул класс Spring Security только для его реализации, которая может оказаться полезной при передаче токена безопасности между уровнями приложения. - person manish; 13.02.2014