《前言》

(一) Winner2.0 框架基础分析

(二)PLSQL报表系统

(三)SSO单点登录

(四) 短信中心与消息中心

(五)钱包系统

(六)GPU支付中心

(七)权限系统

(八)监控系统

(九)会员中心

(十) APP版本控制系统

(十一)Winner前端框架与RPC接口规范讲解

(十二)上层应用案例

(十三)总结

《理解Oauth2.0》

关于SSO分两个篇章来讲,先讲讲Oauth2.0,之前还特地百度了一下Oauth怎么读,我们每次交流的时候都直接读字母O·A·U·T·H2.0,

这里引用一下:http://how2read.me/questions/oauth, 其实每次开会以及交流的时候很重要的一点就是先定义名字,面对沟通过程中造成困扰。

我们简单一点这个单词就读:“欧斯”;

简单来说Oauth是一套协议,并不属于任何一种技术。只是大家遵守这种协议标准就能很方便的对接。我们也经常讲:“小公司做产品,大公司做标准”.

为此我特地上了一下管网想看看是哪个公司制订的:https://oauth.net/

结果一堆英文我也没找着,不过我在维基百科到是找到了:https://zh.wikipedia.org/zh/OAuth。(注意:要FQ才能看的到。)

我就直接Copy了:

"OAuth开始于2006年11月,当时布莱恩·库克正在开发Twitter的OpenID实现。与此同时,社交书签网站Ma.gnolia需要一个解决方案允许使用OpenID的

成员授权Dashboard访问他们的服务。这样库克、克里斯·梅西纳和来自Ma.gnolia的拉里·哈尔夫(Larry Halff)与戴维·雷科尔顿(David Recordon)

会面讨论在Twitter和Ma.gnolia API上使用OpenID进行委托授权。他们讨论得出结论,认为没有完成API访问委托的开放标准。

2007年4月,成立了OAuth讨论组,这个由实现者组成的小组撰写了一个开放协议的提议草案。来自Google的德维特·克林顿(DeWitt Clinton)获悉OAuth项目后,

表示他有兴趣支持这个工作。2007年7月,团队起草了最初的规范。随后,Eran Hammer-Lahav加入团队并协调了许多OAuth的稿件,创建了更为正式的规范。

2007年10月, OAuth核心1.0最后的草案发布了。"

===============================华丽的分割线=====================================

我们先来看看Oauth这套网络开放协议是做什么的?用一个词语来概括就是:“授权”。

我在网上找了很多资料,我最喜欢的一个例子就是关于“豪车备用钥匙”这个例子:

如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间。是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题。

豪车一般配备两种钥匙:主钥匙和泊车钥匙。当你到酒店后,只需要将泊车钥匙交给服务生,停车的事情就由服务生去处理。与主钥匙相比,

这种泊车钥匙的使用功能是受限制的:它只能启动发动机并让车行驶一段有限的距离,可以锁车,但无法打开后备箱,无法使用车内其他设备。

这里就体现了一种简单的“开放授权”思想:通过一把泊车钥匙,车主便能将汽车的部分使用功能(如启动发动机、行驶一段有限的距离)授权给服务生。

(来自:http://blog.csdn.net/seccloud/article/details/8192707

我们用一张图先来看一下正常我们应用请求服务器拿用户信息的过程:

资源是用户个人基础资料如:头像、用户名,身份证等等。总归就是通过授权可以拿到的信息;我们可以简单的理解为登录的过程就是授权的过程。

服务器授权你这个客户端可以拿到某个用户的个人资料。但这只局限于拿本网站,或者叫本项目的信息,如果用户想在本网站获取QQ的信息、微信的信息。

就需要到QQ、微信那边去授权,也就是说“登录”。 而这些第三方网站如何允许你去授权就需要他们基于Oauth协议去实现授权。

(本文中所有讲的Oauth 都是Oauth2.0,因为1.0已经作废,我们完全可以不用去管它。  )

我们经常看到的第三方网站可以使用允许使用QQ登录、微信、微博登录都是实现Oauth2.0:

QQ:http://wiki.open.qq.com/wiki/mobile/OAuth2.0%E7%AE%80%E4%BB%8B

微信:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3

微博:http://open.weibo.com/wiki/Oauth

我们以微博举引用一张流程图:

这样看有点迷糊,其实常规来说Oauth2.0 是三个步骤:

1,请求资源所有者(RO)获取授权码;

2,用授权码请求授权服务(AS)获得令牌(Token);

3,带Token请求资源服务(RS)获得资源;

我们抽象的画一下这个过程:

这里要区分开两件事:一个是我实现Oauth授权提供资源请求,一个是我根据Oauth协议请求别人的资源;

我们平时工作中多数是后者。所以我们的方向重点是想如何对接QQ、微信、微博。更确切的说我们大多时候开发项目

是想对接QQ、微信、微博这些平台帮我们实现使用第三方账户登录本平台。

(当然自身项目如果做到一定规模当然也是可以自己实现Oauth,提供授权登录给其他平台的)

=============================华丽的分割线==========================

我们以QQ举例对接QQ的七个步骤:

Step1. 申请获得appid与appkey

Step2. 放置QQ登录按钮

Step3. 获取Access Token

Step4. 通过Access Token获取用户的OpenID

Step5. 调用OpenAPI,来请求访问或修改用户授权的资源

如果仅仅以QQ号作为平台账户那上面五个步骤就够了,将QQ号写入系统记录,每次登录跳QQ就ok了。

如果不是则还需要以下两个步骤:

Step6. 将QQ信息与用户信息绑定

Step7. 未注册则隐式注册,即:要求用户绑定手机号并填写初始密码

我们根据这七步来画一个流程图已开发完毕的情况下,用户的第三方QQ好登录流程(这里就不详细写明所有参数,所有参数请上QQ开放平台浏览):

差不多,这就完成了一个对接QQ的Oauth2.0的工作,其实这里我本来想把所有参数都加上然后画一个所有请求的的流程图。

但是想来不怎么好画。所以就画了个最简单的界面流程图,这算是个偷懒的行为吧。 总的来说,QQ,微信、微博基本都是这种流程详细的参数官网都很详细。

(提供Oauth2.0授权的网站很多,其中GitHub也有提供,所以我看到很多网站也可以使用GitHub账号登录。)

======================华丽的分割线==================

最后,修正一下上面有个观点,我说:“一个是我实现Oauth授权提供资源请求,一个是我根据Oauth协议请求别人的资源,大部分的时候我们的工作是后者。”

这里有一点细节要再详细说明一下,后者是我们根据Oauth协议请求别人的资源比如QQ这种,但是前者不完全是提供资源给第三方“外部”项目。

我们完全可以把登录系统做成基于Oauth协议实现的,但是我们没有开放给“外部”第三方调用,而是给自己的“内部”项目调用。

比如:SSO+APP应用。SSO基于Oauth实现了授权协议,而APP想要登录,或者请求服务端接口就一些敏感信息时就必须经由登录获取授权,得到Token令牌。

再带着token令牌获取需要的信息资源。 只是说我们没有对给第三方开放,但是我们还是基于Oauth标准来实现的。所以修正一下,多数时候是根据Oauth协议请求别人的资源

但更多时候我们是基于Oauth协议实现授权给我们项目里的Client调用,少数时候我们需要对外开放。

这一章其实没有把Oauth讲的很深,我这里引用一篇博客:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html。这篇博客就讲的很细致,对于Oauth授权细分情况下的几种模式都讲的很到位。

因为下一篇能要讲Winner2.0框架中的SSO单点登录系统,所以讲把Oauth单独拿出来写一篇偏基础的博客,其实更深入的细分我也没有全部吃透,大体流程其实都差不多。

好了,差不多就讲到这里。有兴趣一起探讨Winner框架的可以加我们QQ群:261083244。或者扫描左侧二维码加群。

程序员的自我救赎---3.1:理解Oauth2.0的更多相关文章

  1. 程序员的自我救赎---3.2:SSO及应用案例

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  2. 程序员的自我救赎---1.4.2: 核心框架讲解(BLL&Tool)

    <前言> <目录> (一) Winner2.0 框架基础分析 (二) 短信中心 (三)SSO单点登录 (四)PLSQL报表系统 (五)钱包系统 (六)GPU支付中心 (七)权限 ...

  3. 程序员的自我救赎---11.3:WinService服务

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  4. 程序员的自我救赎---11.4:FileSystem文件服务

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  5. 程序员的自我救赎---12.2.3: 虚拟币交易平台(区块链) 下 【C#与以太坊通讯】

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  6. 程序员的自我救赎---11.1:RPC接口使用规范

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  7. 程序员的自我救赎---1.4.1:核心框架讲解(DAL)

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  8. 程序员的自我救赎---1.4.3: 核心框架讲解(MVC)

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  9. 程序员的自我救赎---10.1:APP版本控制系统

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

随机推荐

  1. TiDB 作为 MySQL Slave 实现实时数据同步

    由于 TiDB 本身兼容绝大多数的 MySQL 语法,所以对于绝大多数业务来说,最安全的切换数据库方式就是将 TiDB 作为现有数据库的从库接在主 MySQL 库的后方,这样对业务方实现完全没有侵入性 ...

  2. hadoop2集群中关键配置文件的记录

    配置HDFS  高可用 1.配置HDFS配置文件 $ vi hdfs-site.xml #写入 <configuration> #配置NameService 名字随便起 <prope ...

  3. linux下使用crontab实现定时PHP计划任务失败的原因分析

    这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下   很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...

  4. ZOJ 3777-Problem Arrangement(状压DP)

    B - Problem Arrangement Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %l ...

  5. json标准是双引号

    双引号才是json 的标准,单引号是不规范的(虽然在js 中是行的通的)!json 的名称和字符串值需要用双引号引起来,单引号的话,使用json.parse会出现错误

  6. String类型

    String字符串的length属性返回的是该字符串里面16位字符的数量,如果字符串包含double-byte的字符,那么返回的数量可能不对   字符串一旦创建就修改不了 var lang = “Ja ...

  7. 小米Java程序员第二轮面试10个问题,你是否会被刷掉?

    近日,开发者头条上分享了一篇"小米java第二轮面经",有很多的java程序员表示非常有兴趣. 下面l就和各位分享小米java第二轮面经(华为java工程师笔试面试题可以看文章某尾 ...

  8. Java_String_01_由转义字符串得到其原本字符串

    在开发企业微信电子发票之拉取电子发票接口的时候,微信服务器会发送给我们一个2层的转义字符串,而我们要想得到我们想要的结果,就需要进行一些处理: 反转义+去除首尾双引号. 一.需求 现有一个字符串 st ...

  9. JavaScript系列----正则表达式

    1.正则表达式 1.1.正则表达式的类型 正则表达式在JavaScript中,提供了一种内置的构造函数--RegExp. 正则表达式有三种匹配模式: g: 表示全局模式,即模式应用于所有的字符串,而非 ...

  10. RabbitMQ的简单应用

    虽然后台使用了读写分离技术,能够在一定程度上抗击高并发,但是如果并发量特别巨大时,主数据库不能同时处理高并发的请求,这时数据库容易宕机. 问题: 现在的问题是如何既能保证数据库正常运行,又能实现用户数 ...