Как написать сервер OAuth2 в Perl?

Я пытаюсь обернуть голову вокруг OAuth2 и Perl (т. е. Net::OAuth2) – в частности, настройка RESTful API для базы данных и приложения, которое ее использует.

пакет Perl Oauth2 привел меня к Net:: OAuth2.

насколько я могу понять, есть несколько вещей, которые мне нужно сделать (пожалуйста, поправьте меня, если я где-то в сорняках):

  1. Server-side: построить сервер REST (в настоящее время играет с mojolicious для этого), который говорит с базой данных.
  2. серверная сторона: создайте сервер аутентификации/авторизации (??)
  3. клиентское приложение: использует WWW:: Mechanize (или некоторые такие), чтобы поговорить с сервером REST

в моей голове, вот как это работает:

  1. клиентское приложение имеет ключ API (зарегистрированный на сервере (REST server? Сервер аутентификации?), и "запеченный в" клиенту)
  2. пользователь имеет запись (имя пользователя и пароль) в таблице в база данных на сервере
  3. пользователь запускает клиентское приложение и пытается получить доступ к защищенному ресурсу (скажем, обновить строку) (опять же, например, выбрав опцию меню "сделать это" в клиенте; клиент переводит это в URI REST API, например http://the.остальное.сервера/по API/этавещь)
  4. сервер перенаправляет клиента на (серверный) бит аутентификации / авторизации
  5. сервер, клиент и пользователь делают волшебный танец OAuth аутентификация пользователя
  6. сервер, клиент и пользователь делают еще один танец magic OAuth, чтобы убедиться, что пользователь уполномочен видеть этот URI ресурса
  7. если все хорошо, сервер перенаправляет клиента на первоначально запрошенный URI ресурса (с любыми необходимыми пармами аутентификации).

это разумная оценка процесса?

Если да, то имеет ли смысл иметь "аутентификацию/авторизацию" как часть Сервер REST или как полностью отдельный сервер? (на том же оборудовании).

Net::OAuth2::Профиль:: Веб-Сервер красиво объясняет, что должно произойти на стороне клиентского приложения.

тесты http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/ (Если я действительно отсутствует что-то) о работе с профилем веб-сервера Net::OAuth2, который (снова) будет "клиентским приложением".

есть другие примеры написания клиента-подключение к существующему серверу OAuth2, например, материал Google API, – но я не могу найти примеры написания сервера.... (Я вполне готов к RTFM, если смогу найти FM... указатели оценили!)

1 ответов


общая идея состоит в том, чтобы позволить центральному серверу аутентификации обрабатывать учетные данные + генерацию токенов + обработку политики (policy => is этой приложение уполномоченным этой пользователей).

давайте поговорим о OAuth-сервера первый.
i) сервер отвечает за страницу входа, на которой пользователь может ввести свои учетные данные.
ii) проверяет учетные данные, если исправить этот сервер затем проверяет, какое клиентское приложение сделало вызов и проверяет ли "это этой приложение уполномоченным этой пользователь". - А вот и концепция прицелов.
iii) генерирует маркер доступа/код авторизации для приложения.
iv) когда API попадает в клиент с маркером доступа, API должен внутренне передать маркер этому серверу. Задача этого сервера-проверить содержимое токена.

и APIs
i) API должен принимать токен из клиентского приложения, передавать его на сервер-fetch a уникальный идентификатор клиента с сервера и возврат данных клиенту для этого клиента.

на 3-й сторонних приложений,
i) вы должны иметь процесс регистрации. Потребность клиента у клиента-ID и секретный. Google позволяет Вам зарегистрироваться в консоль.
ii) должна быть область, которая сопоставляется с каждым уникальным API. Например, когда вы создаете приложение Google OAuth, вам нужно зарегистрировать свое приложение для области-области G+, picasa, google drive так далее.
iii) маркер доступа уникален для области и сопоставления с разрешениями, предоставленными вашему приложению пользователем. Если пользовательское клиентское приложение выбирает только область G+ и получает доступ от пользователя-приложение может использовать токен только для конечной точки G+.

более подробный ответ о том, как реализовать сервер OAuth можно найти здесь : как бы эффективный OAuth2.0 работа сервера / провайдера?