Может ли настраиваемый поставщик AuthenticationProvider для Spring-Security настроить контекст безопасности OAuth2? - PullRequest
1 голос
/ 01 сентября 2011

Я пытаюсь настроить Spring 3 webapp для работы в качестве прокси для другого приложения, которое обслуживает защищенный ресурс с oauth2.

Мы используем тип предоставления UsernamePassword. Мое приложение не должно знать о пользовательской базе данных; фактически он будет запрашивать другое приложение, чтобы узнать подробности о пользователях (какие у них есть разрешения, среди прочего).

Мое приложение отвечает за отображение страницы входа.

Я хочу использовать пользовательский поставщик аутентификации Spring-Security, который будет:

  • подключиться к oauth-серверу для получения токена доступа
  • затем используйте OAuth2RestTemplate для запроса пользователя, который пытается войти в систему, чтобы получить его GrantedAuthorities, и другие подробности
  • построить UserDetails из этого. (Мой AuthenticationProvider расширяет AbstractUserDetailsAuthenticationProvider)

Проблема:

  • так как я использую для настройки своего приложения spring, spring добавляет OAuth2ClientSecurityContextFilter в цепочку фильтров
  • когда вызывается метод 'retrieveUser' моего класса AuthenticationProvider, этот фильтр не был пройден до сих пор
  • поэтому, если я попытаюсь использовать OAuth2RestTemplate внутри моего переопределенного метода «retrieveUser», я получу исключение:

    java.lang.IllegalStateException: контекст безопасности OAuth 2 не установлен. Невозможно получить доступ к ресурсу «avop-services». в org.springframework.security.oauth2.consumer.OAuth2ClientHttpRequestFactory.createRequest (OAuth2ClientHttpRequestFactory.java:38) в org.springframework.http.client.support.HttpAccessor.createRequest (HttpAccessor.java:76) в org.springframework.web.client.RestTemplate.doExecute (RestTemplate.java:434) в org.springframework.web.client.RestTemplate.execute (RestTemplate.java:401) .. и т.д ..

(я связываю это с OAuth2ClientSecurityContextFilter из-за этой темы: http://forum.springsource.org/showthread.php?98141-error-No-OAuth-2-security-context-has-been-established)

Итак, мой вопрос:

  • имеет ли смысл запускать AuthenticationProvider после воспроизведения других фильтров?
  • если да, то можно контролировать порядок фильтров?
  • или есть способ отложить вычисление UserDetails на более поздний этап в цепочке фильтров?

Я знаю, что это, вероятно, очень специфический случай, но мне интересно, правильно ли я атакую ​​или я что-то упускаю.

Заранее спасибо.

1 Ответ

0 голосов
/ 01 декабря 2011

Решение было использовать добавить фильтр в нужном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...