OAuth with Ruby

1.什么是OAuth

OAuth协议致力于使网站和应用程序(统称为消费方)能够在无须用户透露其认证证书的情况下,通过API访问某个web服务(统称为服务提供方)的受保护资源。更一般地说,OAuth为API认证提供了一个可自由实现且通用的方法。

一个典型的例子是某打印服务提供商printer.example.com(消费方),希望在无须用户提供其照片存储站点密码的情况下,访问用户储存在photos.example.net(服务提供方)上的个人照片。


译言翻译:http://www.yeeyan.com/articles/view/freewizard/4418

2.Who Support

oAuth的诞生可以说是豪门云集啊。一出来的目标就是统一各个网络服务商的各自的登录/授权/认证API,例如Digg, Jaiku, Flickr, Ma.gnolia, Plaxo, Pownce, Twitter, Google, Yahoo, and others soon to follow。不服气的可以再去看看oAuth 1.0规范的作者列表,那些email地址都是牛B闪闪的大公司大巨头牛人啊。

3.Why OAuth

有很多的SNS网站,提供了通过联系人的Email匹配查找朋友的功能,对于大多数人来说,再是否做这一步的时候,都会有所迟疑,通常情况下,用户只会在自己信任的网站上这么做,不过即便这样,心里总会多少有些异样,毕竟是把帐号和密码给了别人,虽然别人保证不记录、不作第二次使用。

透过统一的OAuth机制,上面的这些个迟疑就可以避免了。和Flickr的认证类似,只需要在自己原来的网站认证就可以了,不需要提供帐号和密码给其他人。


4.How To Use


google提供了各种语言的OAuth库:http://code.google.com/p/oauth/

 

 

coldfusion/ csharp/ java/ Obj-c 1.0/ Obj-c 2.0/ perl/ php/ python/ ruby/


5.Example for Ruby
1.下载OAuth库

gem install oauth


2.以豆瓣为例

# Douban OAuth认证包括以下四步内容
# 1. 获取Request Token
# 2. 用户确认授权
# 3. 换取Access Token
# 4. 访问受限资源
     
gem 'oauth'
require 'oauth/consumer'
api_key = ""
api_key_secret = ""
@consumer=OAuth::Consumer.new(
                                api_key, 
                                api_key_secret, 
                                { 
                                  :site=>"http://www.douban.com",
                                  :request_token_path=>"/service/auth/request_token",
                                  :access_token_path=>"/service/auth/access_token",
                                  :authorize_path=>"/service/auth/authorize",
                                  :signature_method=>"HMAC-SHA1",
                                  :scheme=>:header,
                                  :realm=>"http://yoursite.com"
                                }
                               )

puts "1. 获取Request Token"
@request_token=@consumer.get_request_token

puts "2. 用户确认授权"
puts "请将下面url粘贴到浏览器中,并同意授权,同意后按任意键继续:"
puts @request_token.authorize_url
gets

puts "3. 换取Access Token"
@access_token=@request_token.get_access_token

# i should re-generate access_token proxy here, 
# since ruby oauth library assume the domain of the auth site should be same with the resource site
@access_token = OAuth::AccessToken.new(
                                        OAuth::Consumer.new(
                                                              api_key,  
                                                              api_key_secret, 
                                                              {
                                                                :site=>"http://api.douban.com",
                                                                :scheme=>:header,
                                                                :signature_method=>"HMAC-SHA1",
                                                                :realm=>"http://yoursite.com"
                                                              }
                                                             ),
                                          @access_token.token,
                                          @access_token.secret
                                         )

puts "4. 访问受限资源"
@response=@access_token.post "/miniblog/saying", %q{<?xml version='1.0' encoding='UTF-8'?>
  <entry xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:db="http://www.douban.com/xmlns/">
    <content>Ruby OAuth Authorized</content>
  </entry>
},  {"Content-Type" =>  "application/atom+xml"}



这里是douban-api-client的ruby实现,http://doubanclient-ruby.googlecode.com/svn/trunk/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值