google oauth contacts

来源:互联网 发布:java web 图片上传 编辑:程序博客网 时间:2024/06/04 13:46

最近要对google的导入联系人进行改造。

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。

就是说,以前的方式,需要在我们这输入google的账号和密码,不安全。oauth不需要我们第三方应用知道他的密码。

整个的过程是这样的:

首先,去google下申请应用,包括应用的名称,跳转页面等。由google给定client_id,client_secret,redire_url。

然后,生成这样的页面,用户在上面授权。

https://accounts.google.com/o/oauth2/auth?client_id=your_client_id_goes_here&redirect_uri=your_redirest_urls_goes_here&scope=https://www.google.com/m8/feeds/&response_type=code

接着,google会返回一个页面,上面有code。

再接着,利用这个code,发送请求包,获得token,refresh_token等。

https://accounts.google.com/o/oauth2/token

下一步,就把这个token放在一个http的请求包里,发过去给google。比如我们要获取联系人的信息,对应这样的请求:

https://www.google.com/m8/feeds/contacts/default/full?max-results='$max_results&oauth_token='$accesstoken

最后,google就会返回对应请求的内容。

整个过程,可以使用curl来模拟。



后来遇到一个问题,就是oauth获得联系人的数目,比账号+密码方式获得数目要少。不科学。

原因一是,上面的请求要写好。开始没写max-results,获得的不同。查google文档知道的。

原因二是,TiXml解释返回的数据包,不成功。改用pugi:xml后就可以了。(pugi真心好用!)



这里还要吐槽一点。开始时leader去玩了,剩我一个在搞,只改动了一份的服务,却死活和cgi对不上。其实很明显的,就是存在连接建立不成功的问题,必定是有其他服务先于我改动的服务。却不会去查下。死脑筋了。

然后整个服务架构也挺好的,按照名字对应。比如这个服务build出来就叫a,那么可以去查下对应的服务器(有一个列表记录了所有服务器),也叫a(当然一个服务器可以有多个名字,对应多个服务)。

这样就不会存在混淆。

找到另一个服务后,很多情况服务不成功,都是可以找到原因的。要自己细细去看代码,细细去找它的一步步的流程。

中间遇到一个send不成的问题,当时的第一反应就是tcp发送不成功我没办法的啊!其实不然,可以去看下send的内容,看是不是不合法等,总能找到原因的。最后发现就是因为pass字段太少了,存不下code。不要总想着臣妾做不到啊。要细细看代码。



原创粉丝点击