发布日期:2016-03-04 16:29:34

QQ互联通过OAuth协议来实现,本文基于OAuth2.0整理。

QQ互联提供了OAuth协议的介绍:http://wiki.connect.qq.com/oauth2-0%E7%AE%80%E4%BB%8B

OAuth2.0认证的过程大致如下:

  1. 用户在访问网站上点击QQ登录字样后,发起一个网站请求,网站跳转到QQ官方提供的一个oauth2.0认证的网址,格式如下: https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=$appid&redirect_url=$callbackUrl&state=$state&scope=$scope
  2. 上面的网址就会打开一个QQ账号安全登录界面,用户可以快速登录或账号密码登录。这里的账号密码都将发给qq服务器,而不是访问的网站,所以你要看清红框里的网址,防止有些黑网站模仿一个一样的页面来盗取你的QQ账号(防盗秘诀,输入一个错误的密码,如果登录进去了就问题了,当然这是防不甚防的,对方也可以让你登录不进去,却能记录你输入的每一个密码。所以关键是要看清楚网站来源于QQ)。
  3. 用户授权并登录后,QQ认证服务会回调上面访问网站提供的callbackURL。该callbackURL会做一些处理来获取用户信息,这一过程是对用户透明的。这一个透明的过程大致如下4-5:
  4. 网站向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
  5. 有了access_token后发起另一个请求或许openid。请求如下:https://graph.qq.com/oauth2.0/me?access_token=$access_token。 响应通常是个json对象,获取user->openid.
  6. 至此之后访问的网站就可以通过access_tokenopenid以及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

 

参考文档:

  1. OAUTH-OPENID: YOU’RE BARKING UP THE WRONG TREE IF YOU THINK THEY’RE THE SAME THING
  2. OAuth的机制原理讲解及开发流程
  3. OAUTH协议简介

 

发表评论