QQ互联通过OAuth协议来实现,本文基于OAuth2.0整理。
QQ互联提供了OAuth协议的介绍:http://wiki.connect.qq.com/oauth2-0%E7%AE%80%E4%BB%8B
OAuth2.0认证的过程大致如下:
- 用户在访问网站上点击QQ登录字样后,发起一个网站请求,网站跳转到QQ官方提供的一个oauth2.0认证的网址,格式如下: https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=$appid&redirect_url=$callbackUrl&state=$state&scope=$scope
- 上面的网址就会打开一个QQ账号安全登录界面,用户可以快速登录或账号密码登录。这里的账号密码都将发给qq服务器,而不是访问的网站,所以你要看清红框里的网址,防止有些黑网站模仿一个一样的页面来盗取你的QQ账号(防盗秘诀,输入一个错误的密码,如果登录进去了就问题了,当然这是防不甚防的,对方也可以让你登录不进去,却能记录你输入的每一个密码。所以关键是要看清楚网站来源于QQ)。
- 用户授权并登录后,QQ认证服务会回调上面访问网站提供的callbackURL。该callbackURL会做一些处理来获取用户信息,这一过程是对用户透明的。这一个透明的过程大致如下4-5:
- 网站向QQ认证服务器发如下请求:https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=$appid&redirect_url=$callbackUrl&scope=$scope&client_secret=$appKey 获取得到一个access_token
- 有了access_token后发起另一个请求或许openid。请求如下:https://graph.qq.com/oauth2.0/me?access_token=$access_token。 响应通常是个json对象,获取user->openid.
- 至此之后访问的网站就可以通过access_token和openid以及QQ服务器提供的API来获取或修改用户在QQ服务器上的信息,比如用户名信息,用户发表QQ微博等功能。
OK,到此就是OAuth2.0的大体过程和实现。那上面的表象再整理下OAuth2.0对应的术语来解释一下:
- 三个角色:用户自身 user(如你),用户访问的网站Consumer(如超智网),拥有用户账号信息的服务方Service Provider(如QQ,微博,淘宝等)
- 三个重要请求URL:
- 请求跳转到服务商的认证页面(Request Authorization URL):https://graph.qq.com/oauth2.0/authorize
- 请求获得访问令牌Access_Token (Request Token URL):https://graph.qq.com/oauth2.0/token
- 使用访问令牌access_token请求获得用户在服务方的资源信息(Request info URL),重要的资源信息就是openID。OpenID是在服务平台的唯一标识。:https://graph.qq.com/oauth2.0/me
参考文档:
- OAUTH-OPENID: YOU’RE BARKING UP THE WRONG TREE IF YOU THINK THEY’RE THE SAME THING
- OAuth的机制原理讲解及开发流程
- OAUTH协议简介