第三方登陆——OAuth2.0协议

        OAuth协议百度解释为:为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。OAuth是Open Authorization的简写。

       那么OAuth协议具体是指什么呢?例如,我想登陆咱们CSDN的网站,但是我没有账号也懒得去注册,那么我就可以通过下图1中的红色方框里面的那四种方式登陆到咱们网站。第三方登陆——OAuth2.0协议_第1张图片

图1

       例如我选择通过QQ登陆,那么CSDN网站将使用带有特定参数的URL去请求QQ的登陆页面,之后将会弹出如下图2的弹框。图3就是带有特点参数的URL,从图3中我们可以看到登陆的域名是QQ的,并且采用的是oauth协议,并且输入的账号信息都是在QQ的QAuth页面进行的,那么咱们网站是无法得知咱们QQ的用户名和密码的。

第三方登陆——OAuth2.0协议_第2张图片

图2


图3

       下面我们分析一下这个URL:https://graph.qq.com/oauth/show?which=Login&display=pc&response_type=code&client_id=100270989&redirect_uri=https%3A%2F%2Fpassport.csdn.net%2Faccount%2Flogin%3Foauth_provider%3DQQProvider&state=test

https://graph.qq.com:QQ登陆OAuth的服务器的URL,所有想通过QQ登陆的网站都是这个地址。

client_id:CSDN使用QQ登陆时的id,在QQ网站中每个网站对应一个client_id,第三方网站要想使用QQ登陆,必须向QQ互联提交申请材料,只有通过的网站才可以使用QQ登陆。

redirect_uri:回调地址,CSDN向QQ发送请求时,对比client_id是否一致,已确认是否可以登陆成功。

        这个URL被称为Request Token URL: 获取未授权的Request Token服务地址。


        以上是第三方登陆的请求过程,下面我们来看一下登陆结果。当登陆成功后QQ会跳转到CSDN给定的一个地址,并且URL上带有一个加密的参数,如下:

https://passport.csdn.net/account/login?oauth_provider=QQProvider&code=0B22A9D31F1B917502631BE62BE380ED&state=test

QQ登陆授权之后出于安全性的考虑CSDN网站还将发送一个带有特定参数的URL去验证登录信息是否合法。发送的带有特定参数的URL如下:https://XXX.qq.com/oauth/...?...&client_id=100270989&client_secret=...&...&code=XXX

这个URL被称为User Authorization URL: 获取用户授权的Request Token服务地址。


以上就是小编对OAuth协议的理解,如有错误或者遗漏,欢迎大家的指正和分享!

你可能感兴趣的:(PHP)