2016-03-14 2 views
1

У нас есть несколько типов пользователейНесколько типов пользователей - Spring Security Configuration

  • Внутренние пользователи (проверка подлинности с помощью Active Directory)
  • внешних пользователей/клиентов (хранится в DB1)
  • внешних пользователей/поставщиков (хранится в DB2)

Мы планируем использовать Spring Security oauth2 генерировать маркер GWT, который затем может быть использован для вызова набор веб-сервисов

Я могу использовать несколько AuthenticationProviders (LDAPAuthenticationProvider и два DAOAuthenticationProviders), но тогда мы потеряем способность иметь пользователя, чтобы быть BOTH клиентом и поставщиком, например (если они используют SAME email для аутентификации). Так как он прекратит опрос провайдеров после успешной проверки подлинности.

Я также могу использовать профили @ Profile = "vendor/client" и запускать auth-сервер специально для аутентификации Client или Vendor, но это означает два разных процесса = больше обслуживания.

Любые другие идеи? Кто-то сталкивался с чем-то похожим?

ответ

0

Есть несколько вариантов я могу думать:

1 - Если каждый тип пользователя использует другой идентификатор клиента, а затем установить что-то в деталях клиента при загрузке их, чтобы показать, каким образом пользователь должен быть аутентифицированным для клиента. Там есть метод getAdditionalInformation() на ClientDetails, которая возвращает Карту можно использовать для хранения этой информации

/** 
* Additional information for this client, not needed by the vanilla OAuth protocol but might be useful, for example, 
* for storing descriptive information. 
* 
* @return a map of additional information 
*/ 
Map<String, Object> getAdditionalInformation(); 

2 - Передайте пары заголовка или запроса, что AuthenticationProvider затем можно использовать для определения того, как подлинность этого пользователя. Вам потребуется настроить собственную реализацию WebAuthenticationDetails для извлечения этой информации из запроса.

Это должно быть доступно, вызвав getDetails() в объекте аутентификации, переданном в метод authenticate() AuthenticationProvider.