php实现第三方登录

php实现第三方登录

1. oAuth2.0原理

网站为了方便用户快速的登录系统,都会提供使用知名的第三方平台账号进行快速登录的功能,第三方登录都是基于oAuth2.0标准来实现的。下面详细分析【基于账号密码授权】和【基于oAuth2.0标准授权】的原理和oAuth2.0授权的优点。

1.1 账号密码授权方式

php实现第三方登录

用户到网站发起使用其他平台账号登录的指令,第三方平台网站就向用户索取账号和密码,用户将账号和密码提供第三方网站之后,网站使用用户提供的账号和密码去登录服务商,取回用户的信息。这就是使用账号和密码授权登录的流程。

存在的问题:

一、服务商的账号和密码都泄漏给了第三方平台,导致安全性问题;

分析:假设服务商是微信,没有人会愿意把微信账号和密码告诉当前访问的网站,一旦当前网站发生信息泄漏,微信账号和密码都会丢失;

二、用户要收回授权,只能通过修改密码来实现,若是有多个第三方网站都是用

同一个服务商授权登录,那么所有第三方网站的授权都被收回来了;

分析:假设我们想要收回授权给当前网站的账号和密码,又不可能让第三方主动放弃已给

授权,那么只有用户自己修改微信密码,但是有多个第三方网站都被微信服务商授权了登录,修改密码的同时,其它网站的授权也都失效了;

三、很难实现给不同的网站,授予不同的权限;

1.2 oAuth原理和授权流程

为了解决上述传统的账号密码授权方式存在的问题,oAuth项目组制定了oAuth标准,目的在于为API访问授权提供一个开放的标准;oAuth是针对访问授权的一个开放标准,与以往的授权方式不同之处是oAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此oAuth是安全的。oAuth是Open Authorization的简写。服务商和第三方平台依据oAuth标准来编码,服务商可以实现一个安全的授权机制,第三方应用调用服务商资源也有了统一性,服务商和第三方依据统一的标准来实现自己的功能。

php实现第三方登录

用户向第三方网站发起请求,请求使用其它平台授权登录,这个时候第三网站并不是直接的要求用户提供其它平台的账号和密码,而是引导用户浏览器跳转到服务商的授权登录页面,用户在服务商的网站页面进行登录完成授权。所以解决了刚才的第一个问题,用户不需要给第三方用户透露账号和密码。登录授权之后,服务商就会生成一个一次性的用来访问资源的访问码,我们叫做令牌,这个令牌包含了用户、第三方网站、资源权限的信息。生成这个令牌之后,服务商又引导用户浏览器携带这个令牌跳回第三方网站的页面,网站接收这个令牌后,第三方网站就可以携带令牌作为凭证访问服务商上面有权限访问的资源。在这个过程中,用户没有泄漏账号和密码给第三方,成功授权登录,并且限制了第三方访问的服务资源的权限。

下面是oAuth2.0授权流程图

php实现第三方登录

2. php实现微信授权登录

在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。 

微信接入流程

第三方登录

第一步:请求CODE

https://open.weixin.qq.com/connect/qrconnect?appid=wxd7ygg9f86e0e&redirect_uri=http://www.rainzfw.tech/third-login/weixin.html&response_type=code&scope=snsapi_login&state=123

若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。

php技术

微信二维码

用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数

http://www.rainzfw.tech/third-login/weixin.html?code=bckbjhbjhvbvjaf43415&state=123

第二步:通过code获取access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

php技术

返回说明:

{

    “access_token”: “OezXcEiiBSKSxW0eoylIeFy2HFC4Bxv9JvC0Sgj4Px4_8TX1ci3jF_QP_6sWjvx2rCAUjXEP1_9edZdJLf3MIwii2N8cnTooDfx7nYpFRmOSZyq4gb2FNdWJr__KUqPtcfVUvg6XBTucZZ4zH6v8VQ”,

    “expires_in”: 7200,

    “refresh_token”: “OezXcEiiBSKSxW0eoylIeFy2HFC4Bxv9JvC0Sgj4Px4_8TX1ci3jF_QP_6sWjvx2lW60INlf6AK1q21rW7mJyc5yG3GZ9p1psANOKTi2EZUQXA6CnwSXxDQlJ3421tEOvCWIrJhkA8oTqjsLKYG-yg”,

    “openid”: “oJekJs2faTQ47FGjDOEIyOPMN97s”,

    “scope”: “snsapi_login”,

    “unionid”: “o4wcnw02YjFUYglZxV0LwcBkVF6Y”

}

php培训

第三步:通过access_token调用接口:

1. access_token有效且未超时;

2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。

对于接口作用域(scope),能调用的接口有以下:

接口作用域

其中snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。接口调用方法可查阅《微信授权关系接口调用指南》

https://blog.csdn.net/villainy13579/article/details/70231191

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113047.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月25日 下午3:00
下一篇 2021年10月25日 下午3:00


相关推荐

  • padstart方法_PADS 2.4打开PCB显示已停止工作

    padstart方法_PADS 2.4打开PCB显示已停止工作之前两天搞得头皮发麻,有个需求是写个版本比较的方法,比如’10.5.4’版本是否大于’9.52.1’版本。正常的思路是使用split去截取几段,然后做递归比较。如下://版本对比constsort=(item1,item2)=>{if(item1[0]>item2[0]){returntrue}elseif(item1…

    2025年10月14日
    8
  • 开源阅读书源_阅读3.20.0518追书神器 海量书源 免费开源无广告[通俗易懂]

    开源阅读书源_阅读3.20.0518追书神器 海量书源 免费开源无广告[通俗易懂]特别声明所有软件皆来源于网上收集整理,仅供学习与交流技术,不得用作其它用途,如有侵犯你的权益,请联系我们,我们将于24小时内进行删除,谢谢你的配合!1阅读是一款开源免费的无人维护的电子书阅读应用程序。作者感言:如今的电子小说阅读应用总是在不断的添加广告,作为一个程序猿这是受不了的,于是开源的阅读软件来,你不用再担心广告。本软件fork一个无人维护的阅读软件,经过大量修改,实现自定义书源,…

    2022年6月21日
    1.8K
  • anaconda安装opencv(whl文件)

    anaconda安装opencv(whl文件)我用pipinstall和condainstall的方法都安装不上去,都失败了,找了很多原因都没办法解决。没办法,只能尝试一下用第三方包whl文件安装下,因为原来没有用过这个方法,也不知道难不难,小心的去试了一下,没想到非常的容易!而且清华大学opencvpython库里的whl文件下载速度非常快(几十秒),比我之前在别的地方找的whl文件快多了。没安装上opencv或其他库的小伙伴,…

    2022年5月22日
    129
  • Java Socket(转载)

    Java Socket(转载)

    2021年8月12日
    62
  • scrapy安装步骤_scrapy官网

    scrapy安装步骤_scrapy官网安装scrapy过程中出现各种包安装错误,所以自己一直看教程知道scrapy安装需要准备好各种环境。这些包按照从下到上的顺序下载,lxml这个包按下文教程安装。不想看过多文字和图片的懒人们可看教程视频:http://www.iqiyi.com/w_19rz36pjft.html利用pipinstall命令安装pywin32,pyopenssl.这两个包可在cmd安装成功pip…

    2026年1月17日
    4
  • 周红伟:OpenClaw终极部署指南

    周红伟:OpenClaw终极部署指南

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号