Как указать, какие ресурсы защищать с помощью конфигурации поставщика Spring Security OAuth2 - PullRequest
2 голосов
/ 05 августа 2011

В настоящее время я реализую приложение Spring MVC, которое является одновременно клиентом OAuth (в том смысле, что оно потребляет данные от сторонних поставщиков услуг), и поставщиком услуг OAuth2 (в том смысле, что оно должно обеспечивать средства для третьегоучастник oauth клиенты будут использовать данные из этого приложения из выделенного API REST).

Хотя у меня нет проблем с реализацией приложения в качестве клиента OAuth, конфигурация моего поставщика услуг OAuth2 мешает приложениям проходить проверку подлинности с поставщиками услуг - если я включаю конфигурацию Oauth2, она выглядитперехватывать обратные вызовы к приложению от сторонних поставщиков услуг.Отключение возвращает приложение обратно в его нормальное рабочее состояние.

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

Чтобы упростить вопрос, как настроить провайдера Spring Security OAuth2 для управления одним корнем URL (например, «/ restapi / *»), и только этим URL, при этом он полностью игнорирует все другие URL?Я взглянул на ресурсы на домашней странице проектов , но у меня ничего не вышло ...

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

1 Ответ

1 голос
/ 05 августа 2011

Из коробки вы не сможете сделать это с помощью Spring Security 3.0, но вы можете сделать это в версии 3.1.Согласно этой записи блога :

В Spring Security 3.1 вы сможете использовать более одного элемента http для создания нескольких цепочек фильтров.Каждая цепочка обрабатывает различные пути в приложении, например API без сохранения состояния под URL / rest / ** и конфигурацию веб-приложения с сохранением состояния для всех других запросов.

Для того, что вы хотите, вы можете создать подклассфильтры безопасности поставщика и переопределение doFilter() применяются только к определенным URL-адресам.

Если вы используете конфигурацию пространства имен, вам нужно, чтобы ваши подклассовые фильтры заменили соответствующий фильтр в цепочке фильтров.Вроде боль, но выполнимая.Например, вот как я делаю это для моего пользовательского VerificationCodeFilter:

override def afterPropertiesSet() {
  setVerificationServices(springVerificationCodeFilter.getVerificationServices)
  setClientDetailsService(springVerificationCodeFilter.getClientDetailsService)
  setUserApprovalHandler(springVerificationCodeFilter.getUserApprovalHandler)
  super.afterPropertiesSet()

  val filterChainMap = filterChainProxy.getFilterChainMap
  val filterChain = filterChainMap.find(_._2.exists(_.isInstanceOf[SpringVerificationCodeFilter])).
                    getOrElse(throw new Exception("Could not find VerificationCodeFilter in FilterChainMap"))._2
  val index = filterChain.indexOf(springVerificationCodeFilter)
  filterChain.remove(index)
  filterChain.add(index, this)
}
...