日期:2011-09-24  浏览次数:20859 次

 

写在前面: 博客很久没有更新了,主要是事情实在太多,不过最近也确实做了些比较有价值的事情,后面和大家慢慢分享

笔者在腾讯主要负责开放平台openapi的工作,由于工作关系,这几天遍历了 百度、人人、新浪、淘宝 4个平台,研究了一下他们对于站内应用、网站登录、移动应用的整合方式,并开发了一个百度站内应用的demo。

百度站内应用demo:
体验地址(要体验的话,请先联系我开通白名单):
http://app.baidu.com/app/enter?appid=385894&debug=1&is_from_dev=1&canvas_pos=platform
代码已经开源在github上: https://github.com/dantezhu/baidu_app_demo,里面封装了一个baidu的sdk,有需要的朋友可以直接拿去用。
开发语言用的是 python+flask

移动应用 和 网站接入,这两种接入都是走的oauth的方式,这个基本所有平台都是一样的。
而对于站内应用则和腾讯目前不太一样,所以着重说明一下在这里的处理,仅以百度举例:
百度的教程在这里: 百度站内应用开发文档

1. 当用户点击应用列表进入时,百度会传给应用两个参数: bd_user, bd_sig,看起来很像腾讯开放平台的openid和openkey,但是实际上百度这两个参数是无法做到很强的登录态保证的,仅能用来保证这两个参数不是人为篡改的。

2. 如果两个参数校验通过,那么就要看应用的session中的userid和bd_user是否相同。其实这是百度推荐的一种应用开发方法,即为了避免每次用户进入应用都要调用oauth那一套登录体系,所以建议应用在第一次登录成功就写入到自己的session中。 对应到腾讯平台来看,我们其实并没有在wiki上强制或推荐要求用户这么做,主要是即使应用不写自己的session,每次都来调用腾讯验证openid、openkey的接口,对用户来说也不会有什么区别;但是对应百度的话,每次调用百度的登录授权接口,即使之前授权过也会弹出一次对话框(在文章最后的截图就能看出来)

3. 如果第2步相同的话,证明用户可能是刚刚刷新了页面,所以就直接进入应用主页。如果不相同,那么就要开始标准的oauth2.0登录。但是这里百度是只推荐用 server-side的方式来走的,所以编码有些复杂,但是安全性也高一些。

4. 如果用户登录授权ok,那么应用要在跳转到的redirect_url中写上session,然后跳转到首页。整个流程结束。

以下是我写的百度站内应用demo的截图:

最后要说下,百度对应用做了很多监控,比如在页面上必须放上monitor脚本,等等,这里值得我们借鉴。