1. oAuth2.0原理

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

1.1 账号密码授权方式

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

存在的问题:

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

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

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

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

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

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

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

1.2 oAuth原理和授权流程

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

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

下面是oAuth2.0授权流程图

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。

用户允许授权后,将会重定向到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

返回说明:

{

"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"

}

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

1. access_token有效且未超时;

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

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

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

作为一名合格的PHP不仅需要好的代码编写能力,还需要掌握服务器相关知识,下面给大家推荐腾讯云搞活动的服务器,刚开始不需要服务器配置太好,纯当练手!点击链接查看官方活动https://cloud.tencent.com/act/cps/redirect?redirect=1067&cps_key=32f906e6e5f3be5e8669b35951da56fc&from=console

php实现微信第三方登录相关推荐

  1. php手机注册和微信登录统一,微信第三方登录账户统一的问题

    微信公众号的 open_id和PC上的微信第三方登录 open_id 是一致的吗? 按照微信公众平台的文档 open_id应该是针对当前账户或者说是应用的,换句话说不同账号和应该应该是不一样的,那么如 ...

  2. 微信第三方登录测试时报Scope参数错误或没有Scope权限解决方法

    微信第三方登录测试时报Scope参数错误或没有Scope权限解决方法 参考文章: (1)微信第三方登录测试时报Scope参数错误或没有Scope权限解决方法 (2)https://www.cnblog ...

  3. iOS微信第三方登录实现

    iOS微信第三方登录实现 字数2824 阅读7603 评论19 喜欢46 注意:代码自己动手写,不要复制! 一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标准构建的微信O ...

  4. php实例-微信第三方登录

    下面小编就为大家带来一篇微信第三方登录(原生)demo[必看篇].小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在一家ecstore二开公司有一段时间了,公司希望往自己 ...

  5. 微信第三方登录,主要手机没有安装微信处理

    现在处理微信第三方处理的方法百度下有很多,这里主要说一下如果手机没有安装微信的处理. 前一段时间朋友由于没有对手机未安装微信做处理,被苹果审核组给拒绝了,主要原因就是说微信第三方登录没有对未安装微信的 ...

  6. apicloud——微信第三方登录、apple登录

    apicloud中微信第三方登录的问题 混合开发移动应用很火啊现在,多数公司都要求是必备技能,或者加分技能,所以学习来了 如下是作为前端工作者应该了解的内容,更加详细的前往官方示例 *** 结合api ...

  7. QQ 微信 第三方登录 分享

    </pre>一些基础性的东西我就不说了,至于怎么去下载SDK,什么的相信都知道<p></p><p>QQ </p><p>1.第三方 ...

  8. 微信第三方登录接口开发

    微信登录接口开发须知 APP登录接口 PC网站登录接口 微信移动网页登录接口(又称微信公众号授权登录) 移动端非微信自带浏览不支持微信登录 微信移动网页登录接口(又称微信公众号授权登录) 先要与开放平 ...

  9. 微信第三方登录前后端分离实现思路

    微信第三方登录前后端分离实现思路 前端实现 这里说一下前后端的思路,页面加载时声明一个变量state='时间戳+6位随机数', 前端路径生成二维码, 其中有个state参数需要我们传递,这个参数你传什 ...

  10. iOS 微信 第三方登录实现

    这篇文章原blog写得很好,排版也很好,之所以转载,完全是为了做个记录. 注意:代码自己动手写,不要复制! GitHub 一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标 ...

最新文章

  1. 巨大的需求之下 人工智能如何更快落地?
  2. 0x68111002_关于迪兰R9 270显卡ID68111002终于可以驱动了
  3. 蓝桥杯_算法训练_表达式计算
  4. JPA保存数据时报持久化对象异常:PersistenceException: org.hibernate.PersistentObjectException
  5. leetcode 947. 移除最多的同行或同列石头(dfs)
  6. Ubuntu下安装tilix终端仿真器
  7. 预见2021-罗兰贝格中国行业趋势报告
  8. 生存分析——快手的基于深度学习框架的集成⽣存分析软件KwaiSurvival(一)
  9. 玩客云刷Armbian5.9.0安装青龙提示“面版解决服务异常,请手动执行ql check检查服务状态”
  10. 盛世zeepower远程距离隔空无线充投放商用 低频磁共振无线充电技术——充电有效距离 20-45mm
  11. 【数仓】大数据领域建模综述-《大数据之路》读书笔记
  12. python-获取图片的exif信息
  13. Windows_XP SP3 Profession 正版密钥
  14. 机器学习决策树ID3
  15. 南京航空航天大学计算机组成原理,2017年南京航空航天大学计算机科学与技术学院829计算机专业基础之计算机组成原理考研题库...
  16. Redis入门——3.Redis key的设计技巧
  17. 安卓桌面壁纸_梅糖桌面安卓手机版下载-梅糖桌面app官方版下载v2.2安卓版
  18. java多态练习_Java多态练习
  19. HTML XHTML CS3 JS网页制作(IT培训网站设计+当当网首页设计)
  20. 警惕:暮光之城破晓2免费电影票骗局

热门文章

  1. Fully Convolutional Networks for Semantic Segmentation 个人总结
  2. ASP.NET MVC入门
  3. 影创SDK☀️四、开发注意事项
  4. c++语言计算2的n次方,2的N次方
  5. USGS 官方批量下载软件bda 安装问题
  6. photoshop中如何给图片加水印和去水印
  7. python鸭制作类代码_python鸭子类型
  8. python经典例题及答案_python经典例题100道
  9. LINUX PPP拨号永久在线保障机制
  10. 美国计算机专业大学排名前30,美国计算机专业研究生大学排名TOP30