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

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

Интернет-издания очень часто создаются единичными сайтами, а затем обрастают новыми проектами-сателлитами. Например, создается сайт городских новостей, а затем обрастает спецпроектами по бизнесу, развлечениям, авто и т.д. А затем встает задача по ведению единой базы пользователей для всех сайтов и внедрению единой системы авторизации - Single Sign on. Это довольно типичная ситуация для информационных порталов и к ней желательно готовиться с молодости, потому как переход на SSO может оказаться крайне болезненным (особенно если система создается на базе чужого готового "движка").

Чтобы предвосхитить необходимость перевода клиентских проектов на SSO, я хочу заложить поддержку единой системы авторизации на ранних стадиях разработки. Мало того, я хочу сделать не просто Single Sign-on, а полноценный паспорт-сервер, отвечающий за регистрацию пользователей, хранение персональной информации, восстановление пароля. При авторизации пользователя сайтам-клиентам предоставляется доступ к персональной информации пользователя.

При входе в закрытые разделы сайта-клиента пользователь перебрасывается на паспорт-сервер, где он может зарегистрироваться или залогиниться. После успешной авторизации пользователь перебрасывается на сайт-клиент а в параметрах указывается так называемый ticket, по которому сайт-клиент может запросить у паспорт-сервера статус пользователя (авторизован, заблокирован и т.д.) и его персональные данные.

С технической стороны я думаю сделать это следующим образом. Паспорт-сервер реализуется на базе Merb с поддержкой многопоточности. При авторизации сайты-клиенты могут получить данные пользователя в формате JSON или YAML. Изменение данных пользователя на паспорт-сервере со стороны сайтов-клиентов организуется через REST-овое API. Доступ регламентируется API-ключами, уникальными для каждого сайта-клиента.

Есть несколько тонких моментов, с которыми я пока что не могу определиться:

  • Подходит ли Merb для реализации подобной задачи (с ним просто не работал пока)
  • Какой формат обмена данными выбрать - YAML или JSON
  • Где и как хранить параметры пользователя, полученные от паспорт-сервера - в базе, в memcache, в сессии
  • Какие готовые стандарты можно использовать при разработке API и прочих

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

Какие есть мысли? Обсуждать предлагаю в ror2ru, потому как у меня все руки не доходят сделать подписку на комментарии.