简介
OAuth(Open Authorization),协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名和密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户的授权,因此,OAuth是安全的。
这些解释其实都是可以在网上搜索到的。为了解释的更加清楚,接下来博主结合实例绘图解释:
整个OAuth授权过程中,三者都获得了自己的便利。
用户可以不用注册帐号,可以直接使用关联帐号就可登录新的网站使用资源,且不用担心帐号失窃,因为这个授权过程是安全的。
慕课网可以更加轻易的获取用户量。
腾讯将海量的数据开放给第三方网站,既是为其他小企业做的贡献,也增大了自身的知名度。
版本
OAuth1.0发布于2007年末,存在严重安全漏洞。
OAuth2.0发布于2010年初,解决上一版本的安全漏洞,现被各大网站公司一直使用。
应用场景
1)QQ用户授权慕课网使用其QQ帐号相关信息。
2)获取授权后,在符合权限规则的情况下访问各种API。
3)淘宝帐号,可在支付宝,阿里云中使用。
总的来说,OAuth是某一独立系统,开放其用户资源给另一系统使用的协议。
实现过程(三个步骤)
步骤一:请求OAuth登录页面
Request Token URL,未授权的令牌请求服务地址。
慕课网请求QQ登录页面时使用的带有特定参数的URL。
例如,
https://graph.qq.com/oauth/...?...
&client_id=100490398&...
&redirect_uri=http://www.mukewang.com/...
第一行为QQ登录OAuth页面的地址。
第二行为一个唯一的站点ID,必须和预置服务器上的一致。
第三行为一个回调地址,必须和预置服务器上的一致。
步骤二:用户使用QQ号登录并授权
https://graph.qq.com/oauth/...?...
&client_id=100490398&...
&redirect_uri=http://www.mukewang.com/...
跳转到
http://www.mukewang.com/user/qqcallback?code=xxxxx....
慕课网服务器使用
$_GET['code'];
获取加密字符。
步骤三:返回登录结果
User Authorization URL,用户授权的令牌请求服务地址
为保证安全,确保code是合法服务器获得,没有被劫持,则需要合法接收服务器再发送一个请求(User Authorization URL)。
例如,用户QQ登录授权之后需要请求一个带有特定参数的URL。
https://xxx.qq.com/oauth/...?...
&client_id=100490398&...
&client_secret=xxxxxx&...
&code=xxxxx......
code在短期内会过期且只可使用一次,通常是10秒左右。基于安全考虑。
关于AccessToken
AccessToken,用户通过第三方应用访问OAuth接口的令牌,具有较长生命周期(10天半个月甚至更长)。如果AccessToken过期,可以重新登录授权,或在User Authorization URL中指定参数(刷新AccessToken的参数,各平台各有不同)"......&need_refresh_token=true&......"。
获取AccessToken就可以访问授权帐号的资源,例如,通过慕课网把自己喜欢的课程分享到QQ空间。
AccessToken与RefreshToken
RefreshToken也是有生命周期的,不过比AccessToken生命周期要长,各大平台不一样。
使用实例类比AccessToken
将返回的XML或JSON解析成我们想要的数据
以上是对OAuth2.0的学习与总结。