OAuth - это открытый протокол, созданный Блейном Куком и Крисом Мессиной, чтобы предоставить безопасный API для аутентификации простым и стандартным способом для веб-приложений.
OAuth позволяет вам поделиться своими частными ресурсами (фотографии, видеоматериалы, список контактов, банковские счета), сохраненными на одном сайте, с другим сайтом, без необходимости вводить свои ключи (как правило сочетание имени пользователя и пароля).
Есть много причин, почему не следует делиться своими ключами.
Предоставление Ваших ключей, чтобы социальная сеть могла получить список ваших друзей - это то же самое, как если бы расплачиваясь за обед, Вы передали официанту Вашу кредитную карту и пароль.
OAuth как раз подходит для исключения таких опасных ситуаций.
Принцип работы протокола достаточно простой. Если один сервис (клиент) хочет получить доступ к вашим данным на другом сервисе (сервере), поддерживающем OAuth, то он запрашивает у сервера ключ.
Перенаправляет вас на сервер чтобы вы разрешили доступ к данным (авторизировав полученный ключ) и далее с помощью авторизированного ключа может получить данные, которые он запрашивал, и запрос на которые вы подтвердили.
После авторизации клиент может не только запрашивать ваши данные, но и изменять данные на сервере. Т.е. делать всё, что позволит ему пользователь и сервис, предоставляющий API.
Пользователи, не заботятся о протоколах и стандартах, - они стремятся повысить эффективность работы с надежной конфиденциальностью и безопасностью. Это именно то, для чего нужен OAuth.
Преимушества протокола:
• Спецификация
• Инплементация на многих языках программирования (C#, ColdFusion, Objective-C, Java, Javascript, Jifty, Perl, PHP, Python, Ruby)
• Уровни доступа к объекту
• Установка срока действия ключа для доступа к объекту
• Поддержка большими компаниями: Google, Yahoo, Twitter, Flickr и т.д.
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=@request_token.get_access_token
@photos=@access_token.get('/photos.xml')
Более подробные инструкции OAuth Client Tutorial и How to turn your rails site into an OAuth Provider.
Плагин позволяет реализовать 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
Вам нужно добавить следующие строки в файл 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'
Добавьте следующие строки в вашей модели:
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
Опять-таки побочная проблема. Вряд ли она кому-нибудь мешает, мне например как то пофигу :)
— 03.09.2008 в 04:33
Без особого преувеличения можно сказать, что пост тему раскрыл на все 100 процентов. :)
— 07.09.2008 в 17:19
Народ в подобных случаях говорит - Авось да как-нибудь до добра не доведут. :)
— 08.09.2008 в 22:52
Хм... Читаю и понимаю, что нифига не понимаю о чем речь:)
— 16.09.2008 в 10:01
Хех... :) Почаще пишите смайлики, а то всё так как будто все так серъёзно :)
— 25.09.2008 в 18:08
Даа... Мне кажется, минусы намного превосходят плюсы. Думаю, не стоит заморачиваться.
— 02.10.2008 в 10:03
Интересно! Все бы так писали :)
— 04.10.2008 в 12:18
Эээ, объясните, плиз, а то я чего то не совсем в тему въехал, это как?
— 23.10.2008 в 11:36
Я бы еще кое-что добавил, но в общем-то по сути сказано все.
— 15.11.2008 в 03:10
У меня скоро в букмарках место закончится, но я буду рад добавлять с вашего блога и далее ссылочки на интересные темы!
— 15.11.2008 в 12:10
Отличнейший и актуальный блог! Стабильный житель моего РСС ридера :)
— 18.11.2008 в 23:56
Хороший блог, добавил в избранное
— 30.11.2008 в 22:00
Мне понравился ваш блог, особенно дизайн
— 05.12.2008 в 00:50
Весьма спорно, но как вариант имеет право на жизнь
— 24.12.2008 в 06:53