eng рус  
small_logo

Разработка приложений с помощью Ruby on Rails™


OAuth

OAuth - это открытый протокол, созданный Блейном Куком и Крисом Мессиной, чтобы предоставить безопасный API для аутентификации простым и стандартным способом для веб-приложений.

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

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

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

OAuth как раз подходит для исключения таких опасных ситуаций.

Принцип работы протокола достаточно простой. Если один сервис (клиент) хочет получить доступ к вашим данным на другом сервисе (сервере), поддерживающем OAuth, то он запрашивает у сервера ключ.

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

После авторизации клиент может не только запрашивать ваши данные, но и изменять данные на сервере. Т.е. делать всё, что позволит ему пользователь и сервис, предоставляющий API.

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

Преимушества протокола:

• Спецификация
• Инплементация на многих языках программирования (C#, ColdFusion, Objective-C, Java, Javascript, Jifty, Perl, PHP, Python, Ruby)
• Уровни доступа к объекту
• Установка срока действия ключа для доступа к объекту
• Поддержка большими компаниями: Google, Yahoo, Twitter, Flickr и т.д.

Gem библиотека


Ruby OAuth GEM – библиотека для реализации OAuth клиента и сервера на языке Ruby.

Установка

sudo gem install oauth

Пример использования:

Создать нового клиента, путем передачи его конфигурации в хэше

@consumer=OAuth::Consumer.new( "key","secret", {
    :site=>"https://agree2" 
})

Начало работы – запрос ключа

@request_token=@consumer.get_request_token
session[:request_token]=@request_token
redirect_to @request_token.authorize_url

Когда пользователь возвращается, создается access_token

@access_token=@request_token.get_access_token
@photos=@access_token.get('/photos.xml')

Более подробные инструкции OAuth Client Tutorial и How to turn your rails site into an OAuth Provider.

Rails plugin


Плагин позволяет реализовать OAuth провайдер (сервер) на базе Rails приложения. Текущая реализация плагина работает только с версией Rails 2.x. Для своей работы использует restful_authentication или restful_open_id_authentication плагины.

Установка

Вам нужно установить oauth gem

sudo gem install oauth

Для установки плагина необходимо перейти в корневую директорию вашего приложения и выполнить следующую команду:

./script/plugin install  http://oauth-plugin.googlecode.com/svn/trunk/oauth_plugin

Использование

Можно воспользоваться генератором для быстрого создания OAuth провайдера (сервера).

./script/generate oauth_provider

Routes

Вам нужно добавить следующие строки в файл config/routes.rb

map.oauth '/oauth',:controller=>'oauth',:action=>'index'
map.authorize '/oauth/authorize',:controller=>'oauth',:action=>'authorize'
map.request_token '/oauth/request_token',:controller=>'oauth',:action=>'request_token'
map.access_token '/oauth/access_token',:controller=>'oauth',:action=>'access_token'
map.test_request '/oauth/test_request',:controller=>'oauth',:action=>'test_request'

Модель User

Добавьте следующие строки в вашей модели:

has_many :client_applications
has_many :tokens, :class_name=>"OauthToken",:order=>"authorized_at desc",:include=>[:client_application]

Миграции

Выполнить их, как и любую другую нормальную миграцию в рельсах:

rake db:migrate

Фильтры

Oauth доступ к контроллеру только зарегистрированным пользователям

before_filter: login_or_oauth_required

Ограничить только методами «show», «index»

before_filter :login_or_oauth_required,:only=>[:show,:index]

Не использовать фильтр для методов «show», «index»

before_filter :login_required,:except=>[:show,:index]

Ссылки:


http://oauth.net – официальный сайт OAuth
http://groups.google.com/group/oauth - Google группа
http://oauth.rubyforge.org/ - Ruby GEM
http://code.google.com/p/oauth-plugin/ - OAuth Rails Plugin

14 комментариев к “OAuth”

Оставьте свой комментарий

(не будет опубликовано)

О нас Проекты Блог Контакты
© 2008, команда hashtrain.com