您现在的位置是:网站首页 > 心得笔记

PHP第三方登录-oAuth2.0协议

盛悦2019-03-06548人围观
简介OAuth协议为用户资源的授权提供了一个安全、开放而又简易的标准。与以往授权方式不同,OAuth授权不会使第三方触及到用户的账号信息(如用户名和密码),即第三方无需使用用户的用户名和密码就可以申请获取该用户资源的授权,因此,OAuth是安全的!

什么是OAuth开放式授权Open Authorization?
官方解释:OAuth协议为用户资源的授权提供了一个安全、开放而又简易的标准。与以往授权方式不同,OAuth授权不会使第三方触及到用户的账号信息(如用户名和密码),即第三方无需使用用户的用户名和密码就可以申请获取该用户资源的授权,因此,OAuth是安全的!举例解释:在登录慕课网时,登录表单下方有一个QQ登录,此时我点击QQ登录,会弹出QQ登录页面(url=openapi.qzone.qq.com/oauth/...),并不属于慕课网,但是我们输入QQ账号和密码后会登录慕课网,但在这个过程中,慕课网的服务器并不知道用户的QQ账号和密码。

OAuth的工作原理?

1.png


使用QQ号登录过程还原:用户访问慕课网-》在登录表单中点击QQ登录按钮-》慕课网请求QQ OAuth登录页面-》用户在OAuth登录页面输入QQ号和密码-》QQ的OAuth服务器检验用户输入的账号密码是否正确 ,并且把结果返回(登录是否成功)给慕课网-》慕课网接收到用户登录成功信息后,把用户登录状态切换成登录成功

第三方登录对于参与其中的三个用户有什么意义?

用户:安全!不用老是注册账号 也不用担心QQ信息泄露

慕课网:简易!通过注册增加一个用户远远没有比使用第三方账号登录增加一个用户来的简单

QQ:开放!把海量的QQ用户资源开放给第三方站点


OAuth的应用场景?
OAuth并不单单是使用第三方账号登录这么一个简单的用途,比如:-> 我们使用QQ账号登录慕课网过程可以说是QQ用户授权慕课网使用其QQ账号相关的信息。-> 腾讯公司给OAuth平台开发了很多接口(api),当QQ用户授权某个站点使用他们的QQ账号信息之后,这个站点就可以在制定权限的约束下,来调用api,完成更加高级的操作。比如,我们可以开发一个功能,让那些QQ登录的用户把慕课网上一些有意思的课程一键分享到QQ空间。


OAuth授权流程详解

2.png步骤一:请求OAuth登录页

请求OAuth登录页面,要先知道OAuth登录页面的url地址,这个地址OAuth的官方称之为:Request Token URL(未授权的令牌请求服务地址)Request Token URL 就是慕课网请求QQ登录页面时使用的带有“特定参数的URL”解释:带有特定参数的URL —— 除了慕课网之外 ,还有很多第三方站点在使用QQ登录 ,每个站点在接入QQ登录之前都要到QQ互联的官网注册一下,提交一份申请的材料,说明一下接入的站点描述,站点的域名是什么,回调地址是什么等信息。然后,QQ互联官网会给申请使用QQ登录的站点分配一组appId和APPKey.appid是唯一的。

慕课网请求QQ登录页面的url:

url部分参数讲解:3.png

....部分是一些其他的参数,暂时不考虑client_id:对应的站点的appidredirect_uri:回调地址,在提交申请材料时预留给QQ互联平台的回调地址


步骤二:用户使用QQ号登录并授权

用户输入QQ号和密码就行了!如果输入账号信息不正确,直接被OAth服务器拒绝,要求重新登录。输入账号信息正确,登录成功。当用户登录成功后,会跳转到Request Token URL中的redirect_uri回调地址,并且在跳转的过程中,url后面会带上一个加密后的参数code。当url跳转回慕课网指定的回调地址中,在PHP代码中就可以使用$_GET['code']获取code参数

4.png

步骤三:返回登录结果

步骤二中,站点拿到加了密的code.基本可以确定用户输入的账号和密码是匹配的,也就是说登录是成功的。但是出于安全性考虑,仅凭借code还不能赋予第三方网站使用用户的QQ号去执行一些操作。如果在回调的过程中,code被心怀不轨的人劫持了,那就出大事了!所以,为了确保code被合法的第三方服务器获取到,这里还需要第三方站点的服务器再次请求一个url地址User Authorization URL(用户授权的令牌请求服务地址) 用户QQ登录授权之后需要请求的一个带有“特定参数的URL”。解释:通过对比appid和appkey之外,还检查code的合法性,看code是不是上一步中发送给第三方网站(慕课网)的code,以及再次发起的时间是否在有效时间内。在请求 User Authorization URL之前,慕课网的服务器并不知登录的用户是谁,当慕课网的服务器请求了User Authorization URL之后,会得到响应数据,响应数据包含昵称 、头像、AccessToken等基本账号信息。这时,慕课网服务器就可以吧账号信息写入用户数据表中了。这个时候code就失效了

5.png

url参数说明:

client_id:appid

client_secret:appKey

code:用户授权登录后拿到的code参数(会过期的10s左右)



AccessToken令牌
返回登录结果的响应数据里面包含AccessToken。有了AccessToken,第三方站点便可以用户的身份执行OAuth允许的各种操作(api),如分享到QQ空间。AccessToken生命周期:具有较长生命周期(10天半个月甚至更长)如果AccessToken过期了,我们重新获取AccessToken,只需要重新使用QQ登录下慕课网,这样慕课网就可以重新获取到AccessToken了。

6.png



上一篇:sql注入

下一篇:jquery实现瀑布流布局