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,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。接口调用方法可查阅《微信授权关系接口调用指南》

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

php实现第三方登录的更多相关文章

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

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  2. 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样

    使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...

  3. 腾讯开放平台web第三方登录获取信息类(包含签名)

    不清楚具体参数的可以先看下第三方登录的文档: class QQ { //$appid 你的appid //$openid 获取到的唯一的用户openid //$openkey 获取到的openkey ...

  4. 第三方登录插件.NET版XY.OAuth-CSharp

    XY.OAuth-CSharp GitHub:XY.OAuth-CSharp OSChina:XY.OAuth-CSharp 第三方登录插件.NET版 使用 首先,从NuGet上安装"XY. ...

  5. iOS之ShareSDK实现分享、第三方登录等功能

    (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...

  6. 利用ShareSDK进行第三方登录和分享

    到相应开发者平台注册开发者账号,并添加你要进行分享和使用第三方登录应用的信息. 添加新浪微博应用 注册网址 http://open.weibo.com添加QQ应用 注册网址  http://mobil ...

  7. 分享前端Facebook及Twitter第三方登录

    最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...

  8. iOS - Share 分享/第三方登录

    1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...

  9. IOS 集成第三方登录

    我使用的是友盟上集成的第三方登录功能,一共使用了三个应用的登录授权,QQ.微信.新浪微博.由于第三方登录授权成功后,需要跳转到一个新的界面,所以这里需要在项目里设置第三方登录的SSO授权.就是必须安装 ...

  10. 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)

    第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...

随机推荐

  1. geoserver与OpenLayers配置

          geoserver与OpenLayers配置         目录   1     准备工作.... 4 1.1      需要用到的程序和资料... 4 2     地图格式转换方式(一 ...

  2. Mac OS 安装 独立的asio库

    先安装boost,见前文,然后上官网下载不带boost的asio,版本为:asio-1.12.2 cd到下载的库目录,配置 ./configure --with-boost="boost的安 ...

  3. 各NoSQL数据库管理系统与模型比较

    提供:ZStack云计算 内容简介 NoSQL数据库的存在意义在于提供传统关系数据库管理系统所不具备的特定功能.无论是负责承载简单的键-值对存储以实现短期缓存,抑或是处理传统数据库及结构化查询语言(简 ...

  4. vue里图片压缩上传组件

    //单图上传 <template> <div> <div class="uploader" v-if='!dwimg'> <van-upl ...

  5. Python 数据文件操作——写出数据

  6. Django项目:CRM(客户关系管理系统)--12--05PerfectCRM实现King_admin注册功能获取内存01

    #base_admin.py #Django admin 注册功能的形式 # sites = { # 'crm':{ # 'customers':CustomerAdmin, # 'customerf ...

  7. vim中NERDTREE插件的使用

    一个显示目录树的插件,很不错 学习于: http://blog.csdn.net/xiongzhengxiang/article/details/7375607

  8. SEO优化步骤

    SEO技术并不是简单的几个建议,而是一项需要足够耐心和细致的脑力劳动.大体上,SEO优化主要分为8小步: 1.关键词分析(也叫关键词定位) 这是进行SEO优化最重要的一环,关键词分析包括:关键词关注量 ...

  9. Leetcode720.Longest Word in Dictionary词典中最长的单词

    给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. 若无答案,则返回 ...

  10. AnalyticDB for MySQL 3.0 技术架构解析

    企业数据需求不断变化,近年来变化趋势日益明显,从数据的3V特性看:体积,速度和变化:Big Data强调数据量,PB级以上,是静态数据.而Fast Data在数据量的基础上,意味着速度和和变化,意味着 ...