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/