2013-05-10 2 views
8

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

Perl Oauth2 package привело меня в сеть :: OAuth2.

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

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

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

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

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

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

Net::OAuth2::Profile::WebServer прекрасно объясняет, что должно произойти на стороне клиента.

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

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

ответ

4

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

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

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

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

Более подробный ответ о том, как реализовать сервер OAuth можно найти здесь: How would an efficient OAuth2.0 server/provider work?

+0

Спасибо, divyanshm - что имеет смысл. – bibliophylum

+1

Я также нашел более старый (незавершенный?) Модуль Perl: [OAuth :: Lite :: Server] (http://search.cpan.org/~lyokato/OAuth-Lite-1.31/lib/OAuth/Lite /Server/mod_perl2.pm) ... думал, что буду ссылаться на него здесь для будущих читателей. – bibliophylum

Смежные вопросы