新的起点 新的开始

快乐生活 !

实现从MSN Yahoo和Google导出用户联系人信息系列(2)—深入Oauth

    接上节,在这里我们来看看什么是Oauth,它的原理以及如何实现。
    1. 什么是Oauth?

    OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。同时,任何第三方都可以使用 OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如 PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供一个开放的标准。OAuth规范的1.0版于2007年12月4日发布。通过官方网址:http://oauth.net可以阅读更多的相关信息。

  2. OAuth的原理:
      既然是开放的标准,那么原理其实很简单,就以在MSN导入Google联系人例子。在Oauth中,有消费者(Consumer)概念,也就是说消费者需要使用资源,在本例中,MSN便是消费者,需要使用Google提供的资源。先来看看Oauth相关
的一些术语:

    OAUTH相关的三个URL
        Request Token URL: 获取未授权的Request Token服务地址;
       
User Authorization URL: 获取用户授权的Request Token服务地址;
      
Access Token URL: 用授权的Request Token换取Access Token的服务地址;

       OAUTH相关的参数定义:

        oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.yahoo.com/dashboard/
        oauth_consumer_secret:oauth_consumer_key对应的密钥。
        
oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
        
oauth_signature: 用上面的签名方法对请求的签名。
        
oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
        
oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
        
oauth_version: OAUTH的版本号,可选,其值必须为1.0。


    如图所示,OAuth授权分4个步骤:  A为初始阶段,用户登陆MSN,欲从Google导入联系人。
                          第一步骤为B阶段:MSN站点请求Google站点,获得Request Token 。
                          第二步骤为C阶段:Google返回Request Token。
                           第三步骤为D阶段:MSN通过返回的Request ToKen,并跳转到Google登陆界面,让用户输入登陆Google的账号信息。
                           第四阶段为E阶段: 用户登陆Google并授权MSN可以使用在Google站点的资源,Google站点返回Access Token。
     当MSN获取到Access Token意味着OAuth授权成功,就可以调用Google提供的API了,当然在这里我们就可以调用getContact API来获得Google站点的用户联系人信息。

    3.Oauth的实现:
     以上面步骤为例在B阶段,
        (1)首先调用Google OAuthGetRequestToken API 获得Request Token 完整的URL为   https://www.google.com/accounts/OAuthGetRequestToken
        (2)返回Request Token 后调用 https://www.google.com/accounts/OAuthAuthorizeToken API 也就是C步骤, 调用该API会跳转到Google登陆界面 也就是D步骤,同时调用https://www.google.com/accounts/OAuthGetAccessToken 获得  
                     Access Token。
             获得Access Token意味授权成功,我们就可以调用http://www.google.com/m8/feeds/contacts/default/full?max-results=2147483647来获得该用户的所有联系人信息。

       当然在上述调用之前,作为Google的Consumer MSN, 还必须在Google注册,获得在术语中的 oauth_consumer_key , oauth_consumer_secret. 
       所以如果要我们网站可以通过Oauth授权调用Google的API,也必须在Google注册,获得上述oauth_consumer_key , oauth_consumer_secret 才可以真正的调用。下一节,我们从头开始实现从我们自己的网站通过Yahoo的Oauth来调用
Yahoo公布的API。 
   

posted on 2010-01-01 19:00 advincenting 阅读(2845) 评论(1)  编辑  收藏 所属分类: java EE

评论

# re: 实现从MSN Yahoo和Google导出用户联系人信息系列(2)—深入Oauth 2010-01-02 12:27 咖啡妆

有点例子入门最好了 学习了!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

公告

Locations of visitors to this page

导航

<2010年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(13)

随笔分类(71)

随笔档案(179)

文章档案(13)

新闻分类

IT人的英语学习网站

JAVA站点

优秀个人博客链接

官网学习站点

生活工作站点

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜