论坛首页 编程语言技术论坛

OAuth with Ruby

浏览 5431 次
锁定老帖子 主题:OAuth with Ruby
精华帖 (0) :: 良好帖 (7) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-27   最后修改:2009-03-27

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/

     

       发表时间:2009-04-02  
    chenillen 写道
    最近正在用Google Data API, 谢谢对OAuth的解释

    可以直接用证书进行认证吗?


    貌似不可以的,您看一下OAuth核心规范:
      OAuth认证是指用户在不共享其证书(密码)的前提下授权消费方访问其受保护资源的过程。 在请求受保护资源的过程中OAuth使用服务提供方生成的令牌替代了用户的证书。 这一过程使用两种类型的令牌:
    请求令牌:
    用于消费方向用户请求对访问受保护资源的授权。 经过用户授权的请求令牌可以换取一个访问令牌,只能使用一次,不得用于其他用途。 建议为请求令牌设置一个有限的生命期。
    访问令牌:
    用于消费方代表用户访问受保护资源。 访问令牌可以被用于限制访问特定资源,可以只有有限的生命期。 服务提供方应当允许用户收回访问令牌。应当只有访问令牌被用于访问受保护资源。


    其实,这正是OAuth认证的优点:安全(虽然麻烦了一些)。相比HTTP Basic认证,,不需透露密码给第三方网站,而且授权后可以随时解除授权,,用户自身的顾虑少了。
    0 请登录后投票
    论坛首页 编程语言技术版

    跳转论坛:
    Global site tag (gtag.js) - Google Analytics