《前言》

(一) 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. 批量查询sql脚本

    远程批量查询sql脚本 for i in {1..50} do sql_ip=172.168.0.${i}   information=`mysql -h ${sql_ip} -uroot -ppas ...

  2. Vue源码后记-vFor列表渲染(3)

    这一节肯定能完! 经过DOM字符串的AST转化,再通过render变成vnode,最后就剩下patch到页面上了. render函数跑完应该是在这里: function mountComponent( ...

  3. linux环境下安装redis扩展

    注意:目录的权限   chomd 777 -R 1.安装redis 下载:https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz 上传ph ...

  4. 多项式求和,素数判定 HDU2011.2012

    HDU 2011:多项式求和 Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和.   Input ...

  5. AngularJS学习篇(十九)

    AngularJS Bootstrap 可以在你的 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码: <link r ...

  6. h5 动画页面

    伪元素上就不要做动画了,页面果然应该做一个测试一个啊   拿到设计稿一开始就先看看这个设计稿的布局,有一些是从页面顶部到底部都有效果的,这个时候就要考虑在 iPhone4 这样屏幕不够高的设备上如何保 ...

  7. react-native多图选择、图片裁剪(支持ad/ios图片个数控制)

    扯淡: 目前关于rn比较知名并且封装好的图片选择控件很多,不过能同时支持多图片上传,个数控制兼容iOS/Ad的却寥寥无几,而今天介绍的这款框架可以实现:图片裁剪.最大图片个数限制.拍照.本地相册等功能 ...

  8. 【译】Asp.Net Identity Cookies 格式化-中英对照版

    原文出处 Trailmax Tech Max Vasilyev: ASP.Net MVC development in Aberdeen, Scotland I've been reached out ...

  9. JavaScript系列----AJAX机制详解以及跨域通信

    1.Ajax 1.1.Ajax简介 Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的.所以,大多细节都是一笔带过. Ajax的起源? Ajax一词源于2005 ...

  10. 常见的dom操作----原生JavaScript与jQuery

    1.创建元素 文本节点 JavaScript: document.createElement(),只接收一个参数,创建后需要手动将其添加到文档树中,例如: var newDiv = document. ...