第三方登录 Oauth协议 及应用场景

第三方登陆 

    第三方登录是基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能。而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如Facebook,Twitter等,国内的比如微博、微信、QQ等。 第三方登录的目的是使用用户在其他平台上频繁使用的账号,来快速登录己方产品,也可以实现不注册就能登录。

2.第三方登录的优缺点分析

        第三方登录的优点:简化注册环节,减少可能因为注册繁琐带来的用户损失;简化用户设置个人信息过程,通过第三方登录,直接获取用户头像昵称等基本个人信息,无需用户自行设置;共享账号已有的用户关系,用户进入产品中就能找到熟悉的人,容易留住用户,发现同样使用该应用也用同样第三方方式登录的好友,会有惊喜感;节省用户的记忆成本,用户在使用多个应用时,只需使用第三方登录即可,无需记得每个平台的账户和密码;用户可以把平台上的某些内容一键分享到第三方平台。

         第三方登录的缺点:后台没有创建自己的账户体系时,只用第三方登录,不便于更多维度收集用户信息(主要是用户手机、邮箱),导致后期无法更精细化执行一些运营的策略,比如一些电商平台这一点尤其重要;后台创建了自己的账户体系时,若没有设计好合理的第三方和本地账户对接的方案,会导致同一个用户在平台上有多个账号的情况发生;会受到第三平台影响,比如第三方账户因为某种原因封号了,则会直接导致用户的流失;隐私可能会受到影响,导致自己的一些状态,或者信息间接的被第三方账户里的好友看到。 

3.第三方登录的实现方式

        第三方登录无需绑定平台账号的形式,这种登录方式使用第三方账号直接登录,即可拥有完整的同本地注册用户相同的待遇。优点是简单、快捷,用户第一次只需要登录第三方平台并将登录许可授权给应用即可,只要成功,后续就能像应用注册用户一样使用应用内所有服务。缺点是账号体系在别人手里,一旦第三方登录出现问题,会面临用户及用户数据丢失的风险,给应用的可持续发展带来一定的隐患。    

       第三方登录时需要立即绑定平台账号才可使用的形式,这种登录方式可以将用户信息牢牢抓在自己手里,防止被第三方拒绝提供服务后丢失本应用积累的用户,可以拿到更多用户的联系信息,比如邮箱、手机号码等,可以为后续的持续营销打下基础,可以避免一个用户多个账号同时存在的情况发生。缺点是这种方式给用户的体验不太好,尤其是用户没有本地账号的时候,很让人讨厌,不但没有有减轻用户的注册成本,反而增加了,给用户的感觉是还不如直接注册,多此一举。

       第三方登录时可以延迟绑定平台账号的形式,用户在第三方登录后会获得部分本地注册用户的权限,但在一些关键点上进行限制,引导用户绑定一个本地账号,这种做法在用户的便捷性和应用的安全性上取得了一个最好的平衡。优点是可以降低注册成本,迅速将第三方登录带来的流量留在应用内,提高应用的注册转化率。缺点是会造成一个用户在绑定应用内账号之前会拥有多个的个人账户,一来给用户的使用造成一定的困扰,二来会因为后续的账号合并带来一定的产品和研发工作量。

 Oauth协议的应用场景有哪些:

  Oauth大概意思是说OAUTH是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。

它的特点:

1. 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;

2. 安全:没有涉及到用户密钥等信息,更安全更灵活;

3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

应用场景:

应用到它的地方很多,如京东,淘宝,博客,虎牙等许多知名度高的大型网站都在用,因为它更方便用户的使用,假设我们进去了一个从来都没有进去过的网站,但是进这个网站有一个要求就是必须得要用户注册了登陆后才可以进入,这个时候Oauth得方便性就显示出来了,用户就可以直接用过微信,QQ,微博0等直接授权登陆就可以了,这样不但用户体验好,简便,也可以省下得开发一个成本,因为要是没有这个Oauth得话,我们就要注册,一注册就会需要给手机发送验证码,使用了它之后不但用户体检好,也节约了我们得一个开发得成本

 

 

QQ第三方登陆的流程

 下图为整个接入流程

接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。

  申请appid和appkey的用途  

 appid:应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。

 

appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。

1. 利用composer安装qq登录的依赖(在命令行输入框)

composer require socialiteproviders/qq

2. 将第三方的登录服务者注册进容器内(config/app.php)

 

'providers' => [

    // 移除 'Laravel\Socialite\SocialiteServiceProvider',

    SocialiteProviders\Manager\ServiceProvider::class, // 添加

];

3. 添加门脸类(config/app.php)

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

 4. 添加事件监听器(App/Providers/EventServiceProvider)

 

     protected $listen = [

 

            'SocialiteProviders\Manager\SocialiteWasCalled' => [

 

            'SocialiteProviders\QQ\QqExtendSocialite@handle',

 

        ],

];

 

 

 

5. 在config/service.php添加QQ接口信息

 

'qq' => [

    'client_id' => env('QQ_KEY'),//在QQ互联中通过审核的应用查看  APP ID

    'client_secret' => env('QQ_SECRET'),//在QQ互联中通过审核的应用查看APP Key

    'redirect' => env('QQ_REDIRECT_URI'), //创建应用时设置的回调地址

], 

6. 在.env里面QQ接口的信息

QQ_KEY=xxxxxx   //在QQ互联中通过审核的应用查看  APP ID

QQ_SECRET=xxxxxx   //在QQ互联中通过审核的应用查看  APP Key

QQ_REDIRECT_URI=xxxxxx   //创建应用时设置的回调地址

 QQ_KEY和QQ_SECRET需要在qq互联上申请,QQ_REDIRECT_URI需要在qq互联上设置。 

这里的回调地址必须要跟qq互联管理中心(https://connect.qq.com)设置的回调地址一样。

 

路由:

 

Route::get('/qqlogin','TestController@qqlogin');

Route::get('/qq','TestController@qq');

 

 

控制器:

 

public function qq(){

    return Socialite::with('qq')->redirect();

}

public function qqlogin(){

    $user = Socialite::driver('qq')->user();

    dd($user);

猜你喜欢

转载自blog.csdn.net/weixin_43681591/article/details/86025069