woodenwang 发表于 2018-7-10 12:51

【转载】实现第三方登陆

本帖最后由 wushaominkk 于 2018-7-10 14:54 编辑

   趋于方便化(怎么怎么滴{:301_998:},这里不做过多解释),目前我们可以借助QQ,微信,微博等等实现登陆/注册,今天我们就来聊一聊第三方登陆。


https://static.52pojie.cn/static/image/hrline/5.gifhttps://static.52pojie.cn/static/image/hrline/5.gif

第三方登录
(一)他们都是基于oauth2 协议的
   OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
   允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
   OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程
(二)首先我们知道的是三方:
    1、服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。
    2、用户,存放在服务提供方的受保护的资源的拥有者。
    3、客户端,要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。
(三)具体流程如下:
    使用OAuth进行认证和授权的过程如下所示:
    用户想操作存放在服务提供方的资源。
    用户登录客户端向服务提供方请求一个临时令牌。
    服务提供方验证客户端的身份后,授予一个临时令牌。
    客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
    用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
   授权成功后,服务提供方引导用户返回客户端的网页。
    客户端根据临时令牌从服务提供方那里获取访问令牌。
   服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
   客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。


(四)以QQ为例:
    1.申请开发者                点击成为开发者
    2.创建网站应用获取Appid,Appkey(这里的回调地址很严格,建议先好好看一下手册{:301_990:})
    3.下载官网图片展示以及SDK(这里我们使用PHP)      点击下载sdk
    4.更改配置文件,此时我们两种方法:(此处我们先放在本地服务器上测试)
    1.非高大上法{:301_1001:}:登陆localhost/otherLogin/qq/install/install.html      然后填写需要填写的此处callback为回调地址,然后将本地服务上的API传到你的服务器上
    2.高大上法{:301_997:}.删除资源包中除了API以外的其他所有,打开API/comm文件夹,创建名为inc.php的文件,在文件中写如下内容:
   <?php die('forbidden'); ?>                                        {"appid":"你的APP ID","appkey":"你的APP KEY","callback":"你的回调地址","scope":"get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,get_tenpay_addr","errorReport":true,"storageType":"file","host":"localhost","user":"root","password":"root","database":"test"}
   注:高大上的方法中设置了用户调试,上线时记得关闭{:301_1000:};
    5.回调地址的内容我们先打印Access Token和OpenID,方便使用
   <?php
               echo "is login";
                echo "<hr />";
               require_once("QQ/API/qqConnectAPI.php");
                $qc = new QC();
               echo $qc->qq_callback();
               echo "<hr />";
                  echo $qc->get_openid();
               ?>
                        
      这里好奇宝宝{:301_982:}又要问了Access Token和OpenID是干啥的:
         Access Token是应用在调用OpenAPI访问和修改用户数据时必须传入的参数。
         OpenID是此网站上或应用中唯一对应用户身份的标识,网站或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在网站上或应用中的原有账号进行绑定
                        
                        
   6.测试,本地测试的话会提醒“The state does not match. You may be a victim of CSRF.”。我们线上测试,页面代码如下:
          <?php
               require_once("QQ/API/qqConnectAPI.php");
                $qc = new QC();
                $qc->qq_login();
      ?>
                        
                        
      应该是成功了{:301_975:}(但是你得应用审核成功噢)!!!!
                        
    7.简单演示,点击此处
                        
      扩展:
      使用qq登陆-> 注册/绑定 ->主页;
      使用QQ登陆-> 主页->引诱用户绑定手机号什么的;
      其他自行扩展。




https://static.52pojie.cn/static/image/hrline/1.gifhttps://static.52pojie.cn/static/image/hrline/1.gif





终。所有的美好,唯有自己发现才会更加美好!我期待所有的美好会更加美好!

88868 发表于 2018-7-10 13:13

萌萌哒的小白 发表于 2018-7-10 13:11

学习学习,最近真想学的!

tianzdws 发表于 2018-7-10 13:13

学习学习,提高下!

夕阳武士 发表于 2018-7-10 13:17

学习一下。   

lirijian 发表于 2018-7-10 13:26

了解一下

A羽飞 发表于 2018-7-10 13:45

来看看。。

checkz 发表于 2018-7-10 13:50

学习了学习了

hualong1009 发表于 2018-7-10 13:54

学习了,没打算干这个,但是知道个原理也不错

爱玩猫 发表于 2018-7-10 14:26

感谢分享,学习学习
页: [1] 2
查看完整版本: 【转载】实现第三方登陆