惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - 子游

Flash / Flex Tutorial – How to Create a crossdomain.xml file javascript 跨越解决方案 Complete Date Object Reference 速强软件 什么是邮件营销 server variables Oracle 笔记 日期处理 如何配置IIS7的Custom Handlers? 分布式系统设计实践 多线程更新Processbar 什么是在线互动营销 导入CSV文件进入系统 - 子游 - 博客园 开发自定义控件 ------------Textbox 控件(1) 如何用asp.net做一个图片handler javascript 的 Encode,Javascript,escape,encodeURI,encodeURIComponent,UTF-8 www.sugaroa.com超酷的新一代协同办公自动化系统 超酷的新一代协同办公自动化系统 什么是Rss feed 正确检查上传文件类型或者get mine type from file Sql server 国际化的支持,查询乱码
Google OAuth 简单入门与使用
子游 · 2012-02-13 · via 博客园 - 子游

Posted on 2012-02-13 16:10  子游  阅读(4347)  评论()    收藏  举报

MeetTea需要能够通过Google API来获取用户的用户名和头像,效果就像google.org.cn的排队系统。

那么如何实现呢? 通过几天的学习、研究,下载google的源码,最后了解了原理并制作了一个简单的DEMO。

效果见附件,只有一个简单的test.php,需要自己去申请CONSUMER_KEY和CONSUMER_SECRET,不过申请步骤简单。

申请地址:herehttps://www.google.com/accounts/ManageDomains 

目前仅使用HMAC-SHA1算法。此外可以参考这个http://googlecodesamples.com/oauth_playground/ 有源码,是PHP的。

详细的技术文档在这里 http://code.google.com/apis/accounts/docs/OAuth_ref.html

OAuth验证第一步:Get a Request Token

这个Request Token是请求一个令牌,来允许程序接入google的服务。

具体做法是发送一个HTTP GET请求到https://www.google.com/accounts/OAuthGetRequestToken

并且在HTTP头里有一个Authorization字段,字段里的内容是OAuth开头,加一个空格,然后是每个参数join一个“,”和空格。

此外google的OAuth还有一个SCOPE参数,这个不是标准OAuth里的。

最后注意端口是443,不然会收到一个302;如果程序有问题会收到一个400。

如果是200,则在返回的HTTP BODY里取得$oauth_token,$oauth_token_secret

保存好这两个值,下两步要用到。

第二步是用户操作部分,需要用户授权应用访问GOOGLE相关服务。也就是redirect到 www.google.com/accounts/OAuthAuthorizeToken?oauth_token=刚才的KEY

 获取用户的头像、用户名的scope是http://www-opensocial.googleusercontent.com/api/people/@me

用户允许Access后就会跳转回刚才的页面,并且在URL参数里多了一个参数。

第三步是凭刚才URL里验证的参数发送一个GET请求到https://www.google.com/accounts/OAuthGetAccessToken

获取接入GOOGLE服务的权限,HEADER里仍旧要包含Authorization字段。

得到KEY和SECRET后替换刚才一开始的KEY和SECRET,发送GET请求到 获取用户的头像、用户名的scope,就可以保存下来,用户也无需注册了。

当然,GOOGLE庞大的API还可以帮助你得到用户朋友的EMAIL地址之类的,就看网站的需要了,潜力无限。

豆瓣用的也是OAuth。

==============2009/11/25 update=====================

豆瓣的算法和google的略有不同,主要是在http header里的数据不用rawurlencode

请搜索test.php里

PHP代码

  1. public function to_header($realm='') {/*{{{*/  
  2.   $out ='Authorization: OAuth realm="' . $realm . '"';   
  3.   $total = array();   
  4.      
  5.   /*  
  6.   $sig = $this->parameters['oauth_signature'];    
  7.   unset($this->parameters['oauth_signature']);   
  8.   uksort($this->parameters, 'strnatcmp');    
  9.   $this->parameters['oauth_signature'] = $sig;  
  10.   */  
  11.      
  12.   foreach ($this->parameters as $k => $v) {   
  13.     if (substr($k, 0, 5) != "oauth"continue;   
  14.     //$out .= OAuthUtil::urlencodeRFC3986($k) . '="' . OAuthUtil::urlencodeRFC3986($v) . '", ';   
  15.  $out .= ',' . $k . '="' . $v . '"';   
  16.     $str = $k . '=' . $v;   
  17.     if ($this->string == null) {   
  18.       $this->string = $str;   
  19.     } else {   
  20.       $this->string .= '&' . $str;   
  21.     }   
  22.   }  

此外把params数组里的scope清理掉,豆瓣不需要。详细可以参考http://www.douban.com/service/apidoc/auth

其他基本是大同小异。豆瓣有PHP版的OAuth示例,可惜是做成ZEND FRAMEWORK的。我需要的是单个文件以便拆解到我的框架中。

接下来研究windows live的API和renren.com的API。

本文采用Creative Commons协议,复制本文需遵守三点:1、保留署名(链接);2、非商业性使用;3、再次创作的作品必须以相同的许可协议发布。法律顾问:庄毅雄律师

互动营销专家(邮件营销,在线调查,事件营销)

http://www.supermore.com.cn