Добавление аутентификации OAuth 2.0 в API RESTful

У меня есть API, который требует аутентификации через OAuth 2.0. Первоначально я предполагал использовать HWIOAuthBundle, однако из исследования это больше связано с подключением третьих сторон к механизму безопасности Symfony/auth и не предоставить необходимый механизм для проверки заголовков OAuth 2.0 Authorization.

Затем я нашел некоторую информацию о FOSOAuthServerBundle, которая позволяет приложению стать его собственным поставщиком OAuth 2.0, а также обеспечить необходимую безопасность механизмы для проверки заголовков Authorization.

Однако проблема в том, что я хотел бы интегрировать поставщика OAuth 2.0 (сервера авторизации) во внешнее приложение (которое содержит базу пользователей) и не включать его в API. Это обеспечит некоторый механизм для выполнения проверки маркера против этого внешнего приложения через (другой) RESTful API.

Очки:

  • API RESTful требует аутентификации OAuth 2.0.
  • Сервер авторизации OAuth 2.0, который будет расположен в отдельном приложении.

Мне кажется, что я должен использовать Implicit grant и вызывать сервер авторизации по каждому запросу, чтобы проверить правильность токена.

Правильно ли я думаю?

Ответ 1

Насколько я отказываюсь от вашего требования, вам необходимо аутентифицировать свои API через внешний сервер авторизации OAuth:

  • Клиент должен предоставить маркер доступа, полученный на вышеуказанных шагах а также запрос на доступ к защищенному ресурсу. Токен доступа будет отправлен в качестве параметра авторизации в заголовке запроса.

  • Сервер будет аутентифицировать запрос на основе токена.

  • Если токен действителен, клиент получит доступ к защищенному ресурсу, иначе доступ запрещен.

Вот пример , который может помочь вам в достижении вашего требования. Проверьте этот документ.

Или просто, вы можете сделать с Джерси и Oauth

Кроме того, вы можете проверить Apache Oltu и выяснить способ достижения своих требований.

Ответ 2

Многие крупные компании, такие как Google, Facebook и т.д., имеют отдельный сервер авторизации с сервера API. Проверьте поток авторизации Google OAuth ниже Google OAuth Authorization

Вы также можете проверить Google Документацию OAuth для деталей.

Итак, все, что вам нужно сделать, это реализовать провайдера OAuth, чтобы вы могли разрешить этот провайдер. Там есть список библиотек, доступных на веб-сайте OAuth: http://oauth.net/code. Вы можете специально посмотреть здесь; существует пример для запуска поставщика услуг OAuth в Java.

Ответ 3

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

enter image description here

- Очевидно, что если форум не может декодировать или проверять токен, форум вернет код состояния 401 вместо кода состояния 200.

Пока ваш сервер oAuth и форум имеют один и тот же открытый ключ, вы более чем согласны с разделением вашего сервера oAuth и вашего приложения.

В самом деле, посмотрите jwt.io. Вставьте маркер, который вы получаете от сервера oAuth. Он должен иметь возможность сразу декодировать токен. Затем вы можете поместить свой открытый ключ в текстовое поле "secret", чтобы проверить, что токен проверен.

Ваше приложение (форум в этом примере) должно быть в состоянии сделать то же самое:

1) Возьмите маркер из заголовка авторизации запроса

2) Декодировать токен

3) Проверьте срок действия

4) Проверьте токен, используя открытый ключ oAuth

5) Верните успешный код состояния или код состояния сбоя