RSS-аутентификация с Spring Security

#spring #authentication #spring-mvc #rss #spring-security

#spring #аутентификация #spring-mvc #RSS-канал #spring-безопасность

Вопрос:

Мое приложение защищено с помощью Spring Security и проходит аутентификацию в LDAP. Проблема в том, что RSS-канал также должен быть защищен, разрешая доступ только зарегистрированным пользователям, но без перенаправления на страницу входа.

Существует ли стандартный подход для решения этой проблемы?

Ответ №1:

Вы могли бы попробовать принудительно отправлять учетные данные через HTTP-заголовки (базовая аутентификация выполняется по протоколу HTTPS) и отключить как форму входа, так и сеансовые файлы cookie. Сделайте это, установив create-session атрибут и поместив http-basic элемент внутри него.

 <security:http create-session="never">
    <security:http-basic />
    ...
</security:http>
  

Комментарии:

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

2. @Sinuhe: RSS-клиенты не могут использовать форму авторизации для входа, поэтому у вас нет альтернативы, кроме как использовать что-то, что действительно работает. Но вы можете настроить разные методы входа в систему по разным путям (смотрите раздел документов Spring Security о цепочке фильтров и DelegatingFilterProxy классе о том, как это сделать).

Ответ №2:

Одним из способов сделать это было бы предоставить каждому пользователю какой-либо токен, который находится в конце URL-адреса RSS. Затем вы можете сопоставлять пользователей с токенами и не отправлять ответ RSS, пока не получите соответствующий токен.

Вы могли бы аутентифицировать токен несколькими различными способами:

  1. Подключитесь к архитектуре аутентификации Spring Security, написав поставщика аутентификации
  2. Обработайте соответствие в контроллере, который выводит RSS-канал.

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