利用国内主流的开放平台实现网站的统一认证

   

  • 综述
  •       要实现网站的统一认证,简单来讲就是利用开放平台的接口获取到用户的信息,以绑定自身网站的用户,并实现自动登录。
       
          谈到开放平台,就得提及OAuth。OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的。
          国内主流的开放平台如腾讯、新浪、百度、豆瓣等大部分都是基于OAuth协议实现的。现行的OAuth协议有1.0、1.0a、2.0这三个版本,其中2.0还未正式发布,不过这三个版本都有开放平台支持。
      
          下面主要说明利用OAuth协议实现统一认证,最后再提及几个还未支持OAuth的开放平台。
       
  • OAuth1.0
  •       OAuth1.0版本发布于2007年12月4日。国内的开放平台:网易、豆瓣、搜狐都支持1.0版本。
          OAuth1.0协议可以用下图很直观的描述。
      
      
          利用OAuth1.0进行认证主要分三个步骤进行的:
    A->B:消费方向服务方请求并获得未授权的Request Token。
    C->D:消费方请求服务方上的用户授权,以获得授权的Request Token。
    E->F:消费方利用授权的Request Token向服务方请求并获得Access Token。
          利用Access Token就可以访问服务方的资源了。
       
          接下来如果是为了实现网站的统一认证,只需要获取到登录用户的id,几个开放平台会稍微有些区别:
    豆瓣:直接将用户id放入Access Token在F步骤返回。
    网易、搜狐:需要利用Access Token调用相应的API以获取用户id。
       
  • OAuth1.0a
  •       为了修正对一个callback参数的攻击漏洞,2009年6月24日发布了OAuth 1.0a版本,国内的开放平台:百度、新浪、腾讯、天涯、360都支持1.0a版本。
          此次修正没有对协议流程做任何更改,只是在数据访问的参数细节上做了调整。针对上一节的图来说明:
    A:增加oauth_callback参数。
    B:增加oauth_callback_confirmed参数.其值必须为true。
    D:增加oauth_verifier参数。
    E:增加oauth_verifier参数。
     
          接下来获取用户信息的方式,几个平台也不同:
    百度、新浪、360:直接将用户id放入Access Token在F步骤返回。
    腾讯、天涯:需要利用Access Token调用API以获取用户id。
     
          需要额外说明的是,新浪、360和天涯并没有在A步骤增加oauth_callback参数。
      
  • OAuth2.0
  •       OAuth 2.0还在完善中,并没有发布。2.0版本的关注点在于简化客户端程序员的工作,精简了交换Access Token的过程;此外1.0版本并没有针对不同的客户端提供不同的Access Token交换方式,显然并不是在各种客户端都非常适用,因此在2.0中将此细化到各种客户端都有相应的标准,比如web程序,桌面程序,手机或一些设备,都可以通过各自的特点来实现OAuth。
          虽然OAuth 2.0还未正式发布,最新是第11个版本,但百度、人人网已提供2.0版本的支持了。
          下图是对OAuth 2.0协议的一个抽象描述。
     
         
          可以看到相比OAuth 1.0,2.0版本的认证过程简化了很多,主要分两个步骤:
    A->B:客户端请求资源方的用户授权,以获得Authorization Code。
    C->D:客户端利用Authorization Code向认证方请求并获得Access Token。
          接下来就可以利用Access Token访问资源方的资源。
     
          获取用户信息的方式,百度2.0和人人网也不同:
    人人网:直接将用户id放入Access Token在D步骤返回。
    百度2.0:需要利用Access Token调用API以获取用户id。
     
          这里多说一句,百度的OAuth2.0我没有调试通过,但百度的OAuth1.0a没有问题。
     
  • 其他平台
  •       还有几个开放平台并不是基于OAuth协议的,例如开心网、盛大等,下面简要说明一下:
    开心网:需要在自身网站上传一段开心网的javascript脚本,当开心网用户授权后,会利用脚本将一个session_key写入网站域名下的copokie中,利用这个session_key可以调用开心网的API获得用户信息。
    盛大:要简单一些,用户授权后会将一个ticket传递给网站的回调地址,利用这个ticket就可以调用盛大的API获得用户信息。
     
          不过开心网和盛大都必须利用他们的javascript脚本来动态生成登录按钮,显得很不灵活,同时也存在一些问题,这个需要特别留意。
     
          另外关于淘宝、支付宝、移动这几个平台,我还没有接触到。
     
     
posted @ 2011-07-07 12:18  reni  阅读(1881)  评论(1编辑  收藏  举报