锁定老帖子 主题: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(服务提供方)上的个人照片。
有很多的SNS网站,提供了通过联系人的Email匹配查找朋友的功能,对于大多数人来说,再是否做这一步的时候,都会有所迟疑,通常情况下,用户只会在自己信任的网站上这么做,不过即便这样,心里总会多少有些异样,毕竟是把帐号和密码给了别人,虽然别人保证不记录、不作第二次使用。 透过统一的OAuth机制,上面的这些个迟疑就可以避免了。和Flickr的认证类似,只需要在自己原来的网站认证就可以了,不需要提供帐号和密码给其他人。
gem install oauth
# 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"}
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-02
chenillen 写道 最近正在用Google Data API, 谢谢对OAuth的解释
可以直接用证书进行认证吗? 貌似不可以的,您看一下OAuth核心规范: OAuth认证是指用户在不共享其证书(密码)的前提下授权消费方访问其受保护资源的过程。 在请求受保护资源的过程中OAuth使用服务提供方生成的令牌替代了用户的证书。 这一过程使用两种类型的令牌: 请求令牌: 用于消费方向用户请求对访问受保护资源的授权。 经过用户授权的请求令牌可以换取一个访问令牌,只能使用一次,不得用于其他用途。 建议为请求令牌设置一个有限的生命期。 访问令牌: 用于消费方代表用户访问受保护资源。 访问令牌可以被用于限制访问特定资源,可以只有有限的生命期。 服务提供方应当允许用户收回访问令牌。应当只有访问令牌被用于访问受保护资源。 其实,这正是OAuth认证的优点:安全(虽然麻烦了一些)。相比HTTP Basic认证,,不需透露密码给第三方网站,而且授权后可以随时解除授权,,用户自身的顾虑少了。 |
|
返回顶楼 | |
浏览 5475 次