定义
得用户者得天下,每每腾讯推出一项所谓的山寨产品,最终的结果总是稳赚不赔,因为在中国几亿腾讯用户中,总是能找出一小撮极端分子喜欢他们的山寨产品,虽然是一小撮,但是乘以这个几亿的基数,那么就是一个可观的用户数量。这里仅仅是拿腾讯举个例子来说明用户的重要性,但是不是每个企业都有腾讯那样的用户数,如果想吸纳更多的用户使用自己的产品,有没有捷径呢?答案当然就是我下面要说的oauth2了,oauth2提供一种授权方式,开发者可以在自己的网站中集成这种授权方式,让用户使用oauth2提供方的账号来完成登录开发者的网站的功能。
使用步骤
上面啰嗦了半天,来给oauth2下定义,也不知道大家听明白了吗,让我站在你的角度考虑一下,我认为你没有听懂,所以我决定用举例的方式来具体描述。
第一步,你需要到授权提供方的开发者网站上来注册账号,这里假设你注册一个sina微博的开发者账号。在这里,你需要首先注册一个sina微博的账号,然后在sina的开发者网站(http://open.weibo.com/)中绑定这个账号即可,其他网站的注册思路也与此类似。接着选择网站接入,会让你填写网站名称和域名,当然为了防止恶意注册,他你需要在网站的在网站首页中添加给出的meta头部信息或者在网站根目录中上传一个txt文件,以表示你确实是申请网站的所有者。然后经过一系列的填表之后,注册完成,sina那边会给你两个参数,我们这里称其为client_id(sina微博中给出的实际参数名为App Key)和client_secret(sina微博中给出的实际参数名为App Sercet)。
第二步,首先假设你在第一步中注册资料中填写的网站为yoursite,拿到第一步中给出的参数后,你就可以在自己的网站的醒目位置放一个按钮,上面写着sina微博登陆。然后点击这个按钮的时候,需要浏览器跳转到sina微博的登陆授权地址来完成登录。这个地址的格式是这个样子的:
authorizeUrl?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REREDIECT_URI
当然YOUR_CLIENT_ID就是我们在第一步中得到的client_id,YOUR_REREDIECT_URI代表登录完成后跳转回yoursite的地址,注意这个地址的域名必须和你第一步填写的注册资料中的域名保持一致,否则会调用失败。
第三步,登录完成后,sina为跳转到参数2指定的地址中,同时还是在url中加上一个code参数,即回跳的格式如下YOUR_REDERICT_URI?code=CODE。将得到的这个code参数,连同第一步中得到的client_id、client_secret,第二步使用的redirect_uri,发送一个如下格式的http请求:
accessTokenUrl?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REDIRECT_URI&code=CODE
注意,第二步中请求方式是浏览器跳转,而这次为了提供安全性是采用的服务器端post调用,也就是说在服务器端采用curl(php)、httpclient(java)等技术来远程请求sina微博的这个accessTokenUrl地址,同时为了保证传输过程中的安全性,这个地址一般都是https的形式。在调用成功后,sina微博那边会给你返回一个access token和其失效时间,这个参数实际上标示的是当前登录用户的登录状态,你可以理解其为http协议中的session,拿到这个参数之后,你就可以通过sina微博的其他接口,来完成获取用户详细信息、发送微博、上传图片等功能了。
注意,这里除了请求方式不同以外,还有就是这里传输了client_secret,这个参数在oauth2协议中是不向外界进行公开的,仅仅能被开发者和授权方使用,如果这个参数一旦被泄露,那么就可以模拟yoursite进行授权验证,进而拿到登录用户的access token,由于access token参数的生效时间一般很长,这样就相当危险了。不过第三方授权网站一般提供修改client_secret的功能。