Как добавить фильтр ролей по запросу в сочетании с OAuth - PullRequest
1 голос
/ 30 ноября 2011

Я хотел бы разработать портал, который содержит несколько модулей Портал и каждый модуль используют данные, предоставленные веб-сервисом на основе Джерси и защищенные с помощью OAuth 1.0

На данный момент я почти внедрил OAuth-провайдер

Пользователь может подключиться к порталу и получить доступ к модулю

Каждое приложение или модуль имеет определенный токен доступа к ресурсу

Что я хочу сделать, это добавить реализацию роли

Например, для module1 пользователь может иметь 2 роли (role1 и role2), но не может использовать эти 2 роли параллельно

Сначала пользователь использует доступ (module1 / user1 / role1), и у него будет токен, а затем пользователь использует доступ (module1 / user1 / role2), и у него будет другой токен

В зависимости от роли я бы хотел отфильтровать запрос с помощью аннотации RolesAllowed, например

Я читал эту статью: http://objecthunter.congrace.de/tinybo/blog/articles/89

Когда пользователь проходит аутентификацию в веб-сервисе, я могу сохранить в базе данных имя пользователя и роль, используемую для модуля, и RolesAllowedResourceFilterFactory может использовать область, чтобы проверить, находится ли пользователь в роли и может ли он получить доступ к ресурсу

Но можно ли обойти метод auth?

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

Я постараюсь дать вам более подробную информацию, если вам нужно

Спасибо

Ответы [ 2 ]

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

Фильтр oauth Джерси устанавливает контекст безопасности в зависимости от того, какой токен доступа был использован. Вам просто нужно убедиться, что ваша пользовательская реализация поставщика oauth назначает токен с правильными возвращаемыми значениями из метода isInRole () при вызове с различными ролями. Роль для данного токена может быть установлена ​​во время процесса авторизации токена (например, клиент может запросить определенную роль, используя пользовательский параметр, который он передает серверу при запросе токена запроса (это передается в параметре параметров поставщику. Метод newRequestToken ()).

Контекст безопасности, который наборы фильтра oauth будут делегировать методу isInRole () при определении ролей, а RolesAllowedResourceFilterFactory полагается на контекст безопасности. Таким образом, все должно работать как положено, если OAuthToken.isInRole () возвращает правильное значение. Вы сталкиваетесь с какими-либо проблемами?

0 голосов
/ 17 марта 2014

Я знаю, что это старый пост, но я столкнулся с подобной проблемой. В моем случае я решил это точно так же, как описал Мартин. Во время авторизации токена я установил разрешенные роли:

String verifier = provider.authorizeToken(token, sContext.getUserPrincipal(), roles);

где провайдер - @Context DefaultOAuthProvider, токен - DefaultOAuthProvider.Token, а роли - набор ролей, к которым я хочу разрешить доступ по этому токену:

Set<String> roles = new HashSet<String>();
roles.add("someRole");

Тогда в моем сервисе я просто использую метод @Context SecurityContext isUserInRole ("someRole"), который дает мне значение true, если пользователь находится в указанной роли, и значение false, если нет:

if (sContext.isUserInRole("someRole")) {
     ....
}

Надеюсь, это кому-нибудь поможет.

...