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"
    @[email protected]_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/

     

    你可能感兴趣的:(应用服务器,Scheme,Google,Access,Ruby)