Grails: защита REST API с помощью OAuth2.0

Я создаю REST API, используя Grails. Я хочу, чтобы он был защищен с помощью потока OAuth2.0 client_credentials (grant_type). Мой вариант использования выглядит следующим образом:

внешний агент отправит запрос на что-то вроде

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials

и получить access_token. Затем мой URL-адрес (защищенный ресурс) должен быть доступен с чем-то вроде

http://server-url/resource?access_token={access-token obtained before}

Я ищу что-то, что сделает это на Grails простым и быстрым. Какой будет лучший способ/инструмент/плагин для этого? Библиотека Scribe является опцией, если есть какие-либо учебные пособия для моего конкретного случая использования, это будет здорово.

P.S.: Я пробовал spring-security и связанные с ним плагины, ничего хорошего. Любые альтернативы были бы хороши.


person SoftDev    schedule 27.06.2012    source источник
comment
Извините, scribe только на данный момент работает на стороне клиента. Отметить это.   -  person Pablo Fernandez    schedule 27.06.2012


Ответы (3)


У меня такая же проблема. Я нашел много подключаемых модулей Grails, которые помогли вам аутентифицировать ваше приложение по сравнению с другими поставщиками oauth, но ничего, что помогло бы мне сделать мое приложение поставщиком oauth. После долгих поисков я наткнулся на этот плагин для Grails, который будет делать именно то, что вы хотите.

https://github.com/adaptivecomputing/grails-spring-security-oauth2-provider

Я все еще настраиваю его для своего приложения, и я думаю, что в документации может потребоваться несколько правок (в частности, поток author_code), но я получил простой поток client_credentials для работы с минимальной конфигурацией. Надеюсь, это поможет!

person jss12001    schedule 19.07.2012
comment
Этому плагину действительно не хватает документации, и он вроде как заброшен. Из-за этого я перестал использовать Spring Roo вместо Grails. Для Roo есть очень хороший плагин, а поскольку Roo — это просто переупаковка ванильного Spring MVC, вы получаете гораздо больше официальной документации. В любом случае, если Grails не является обязательным требованием, другие продукты семейства SpringSource (например, Spring MVC или Roo) могут лучше справляться с реализациями OAuth. Это просто совет для тех, кто интересуется. Это не должно быть ответом, и поэтому я оставил его здесь, в комментариях. - person petersaints; 08.11.2012

Исходя из моего опыта, Scribe был создан для OAuth 1.0 и имеет очень ограниченную поддержку OAuth 2.0. На самом деле, для тестирования нашей собственной реализации OAuth 2 все, что мы могли использовать, — это оболочка HTTP-запроса, все остальное нам приходилось делать вручную. К счастью, сделать это вручную на удивление легко.

Поскольку я до сих пор не нашел хорошей открытой библиотеки OAuth 2.0 для Java (честно говоря, я не знаком с Groovy), я рекомендую вам написать клиентский код самостоятельно. Вам даже не нужна конечная точка обратного вызова клиента, чтобы использовать поток предоставления учетных данных клиента. Таким образом, вы просто создаете HTTP-запрос (как вы уже писали выше, позаботьтесь об экранировании параметров GET) и получаете содержимое ответа. Ваш поток не использует перенаправления, поэтому просто проанализируйте объект JSON в содержимом ответа, например. с библиотекой org.json. Наконец, отправьте HTTP-запрос, используя извлеченный токен доступа.

Обратите внимание, что ваши примеры не полностью соответствуют стандарту. Стандарт требует использования HTTPS, отправки токена в заголовке HTTP вместо параметра GET и предлагает использовать базовый заголовок авторизации HTTP вместо параметров GET для указания учетных данных клиента.

Возможно, я неправильно понял ваш вопрос, и вы также можете реализовать серверную часть. Библиотека scribe поддерживает только клиентскую сторону, поэтому вы можете найти коммерческую реализацию или реализовать свой собственный сервер. Это сложная задача, но если вы поддерживаете только поток учетных данных клиента, она становится почти легкой. ;-)

person Zólyomi István    schedule 27.06.2012
comment
Спасибо за ваш вклад. Но меня интересует реализация на стороне сервера. Я немного колебался, чтобы реализовать его с нуля, поскольку я не эксперт по безопасности OAuth и не хочу оставлять никаких недостатков безопасности: P. Если быть точным, я искал что-то, что могло бы помочь мне хранить/управлять сгенерированными токенами доступа [автоматически аннулировать их после истечения срока действия] и т. д. Конечно, можно сделать это с нуля, но это может оставить некоторые пробелы. Существует ли что-то подобное для Java, который предоставляет простой интерфейс для создания, хранения токенов и т. д. на стороне сервера? - person SoftDev; 27.06.2012
comment
Я не знаю такой библиотеки, но хранилище токенов — это самая простая часть реализации в виде плагина с понятным интерфейсом (все, что вам нужно — операция сохранения, загрузки и отзыва). Вас должны больше беспокоить детали безопасности, реализующие поток предоставления учетных данных клиента и сохраняющие предопределенные права для учетных данных клиента. - person Zólyomi István; 28.06.2012

Это не подключаемый модуль, это просто пример приложения Grails, выступающего в роли поставщика OAuth. Было очень легко начать работу с Grails 3.

https://github.com/bobbywarner/grails3-oauth2-api

person sethernet    schedule 27.06.2016