OAuth的机制原理讲解及开发流程

原文地址:http://kb.cnblogs.com/page/189153/

本想前段时间就把自己通过QQ OAuth1.0、OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,可一直很忙,今天抽点时间说下OAuth1.0协议原理,及讲解下QQ对于Oauth1.0的认证开发。闲话多说了点,下面直接进入主题。

  1、OAuth的简述

  OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。(我喜欢简单明了,这里没看懂,没关系,接着往下面看)

  2、OAuth的原理

我在图上分了四个步骤,下面是四步的讲解:

  第一步:用户访问第三方网站,比如:就是你需要使用QQ进行登录的网站;

  第二步:你点击QQ登录后,第三方网站将会连接并进行请求,比如:你点击登录后,第三方网站会跳转到QQ平台,提示你进行登录;

  第三步:你要进行授权第三方网站对你的信息访问的一个权限,比如:当你QQ登录成功后,QQ会提示你,是否授权第三方Web访问你的用户基本信息或其他的资源信息,这时你点击授权即可;

  第四步:授权后,第三方Web即可访问你刚才授权的资源信息,比如:你的QQ基本信息-头像、昵称、性别等。

  通过这个原理图示及讲解(图是手工制作,有点草),相信大家都了解了OAuth这个原理的一个基本流程,若看不明白,你可以不用学习制作OAuth了,开个玩笑。(这步后,大家知道什么原理了,但还是无法知道OAuth究竟是如何实现认证的,别急,接着往下看)

  3、OAuth 1.0的认证流程

  这里直接讲解OAuth 1.0协议的认证机制(OAuth 2.0会在下一节中讲述),虽然现在很多平台都是遵循OAuth 2.0,但还是有开放OAuth 1.0平台的,比如:新浪微博、QQ1.0平台等。

  在OAuth 1.0认证中会用到三个重要的Url:

  第一个:Request Token Url,获取未授权的Token的Url;

  第二个:User Authorization Url,请求用户对Token进行授权的Url;

  第三个:Request Access Url,使用Token获取Access Token的Url。

  上面是认证流程中用到的三个Url,在下面的流程示意图中会体现到,这是我讲解OAuth幻灯片的一页,直接截图下来进行讲解:

  第一步:网站向认证平台请求一个未授权的Token,这个Request Token Url是前面说的第一个Url;

  第二步:跳转至用户授权页面,提示用户进行登录,并进行授权,返回获得已授权的Token,用到的User Authorization Url是前面说的第二个Url;

  第三步:通过已授权的Token,向认证平台请求Access Token(数据令牌),用到的Request Access Url是前面说的第三个Url,返回后到这步整个认证流程就结束了,最后一步,是通过数据令牌等参数,调用接口获取用户信息,不完全算认证的流程。(我喜欢简洁明了,认证流程就是这样,相信通过图示及讲解都能明白,若有不明白之处请留言)

  4、QQ OAuth1.0认证中Url的调用及参数的传递

  前面讲了OAuth1.0的机制原理及认证流程,这篇文章着重讲解QQ OAuth1.0认证中Url的调用、各参数的传递、注意事项。而因为现在QQ开发平台上,已经很少能找到OAuth1.0认证的说明开发文档了,采用新的2.0认证模式,所以简单讲述Url请求与返回参数的传递,并没有很详细深入地讲解,有什么问题大家可留言给我。

  4.1、请求未授权的临时Token

  新建一个页面为QQLogin.aspx,用来请求临时Token及跳转到用户授权页。下面是相关Url及参数介绍:

  Request Token Url(请求临时Token的Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token

  请求后,跳转至引导用户登录的Url:http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize

  第一个Url请求参数包含如下内容:(红色为必填、绿色为选填)

参数 含义
oauth_consumer_key 申请QQ登录成功后,分配给网站的appid
oauth_nonce 随机字符串,所有oauth_nonce请使用int型值。
oauth_timestamp unix时间戳(从UTC时间1970年1月1日00:00:00到当前时刻的秒数,不同语言中如何获取请google/baidu之)。

注意第三方服务器时间与腾讯服务器时间相差不能超过5分钟。

oauth_version 版本号,请固定使用1.0
oauth_signature_method 签名方法,请固定使用HMAC-SHA1。
oauth_signature 签名值,用来提高传输过程参数的防篡改性。

签名值的生成详见【QQ登录】签名参数oauth_signature的说明

oauth_client_ip 用户的IP地址(可选),int型

  返回的参数有:oauth_token(临时令牌)、oauth_token_secret(临时密钥对应的令牌)

  第二个Url需要传递的参数为:

参数 含义
oauth_consumer_key 分配给网站的appid。
oauth_token 上一步中,得到的oauth_token
oauth_callback 回调地址,即登录并授权后返回到你网站上的地址。

  返回的参数有:

参数 含义
oauth_token 已授权的token
openid 与APP通信的用户key,它和QQ号码一一对应,访问OpenAPI时必需。

同一个QQ号码在不同的应用中有不同的OpenID。

oauth_signature 签名值。如果网站使用这一步返回的openid,则需要按规则生成签名值,并与该签名值比对,以验证openid以及来源的可靠性。

比对时生成签名值的规则:使用HMAC-SHA1算法,源串:openid+openid的timestamp(串中间不要添加‘+‘符号);密钥:oauth_consumer_secret。

timestamp openid的时间戳
oauth_vericode 授权验证码。

  4.2、请求Access Token数据令牌

  上一步中,我们写了一个回调地址,并顺利得到一些参数,下面就是拿这些参数来进行下一步操作,首先,得到数据令牌(只有拿到数据令牌才可以调用接口获取用户信息)。

  Request Access Url(获取Access Token请求Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token

  Url请求参数包含如下内容:

参数 含义
oauth_consumer_key 分配给网站的appid
oauth_token 已授权的的token,上一步返回的oauth_token
oauth_nonce 随机数
oauth_timestamp unix时间戳(从UTC时间1970年1月1日00:00:00到当前时刻的秒数,不同语言中如何获取请google/baidu之)
oauth_version 版本号,请固定使用1.0
oauth_signature_method 签名方法,请固定使用HMAC-SHA1
oauth_signature 签名值,用来提高传输过程参数的防篡改性。

签名值的生成详见【QQ登录】签名参数oauth_signature的说明

oauth_vericode 授权验证码,上一步返回的oauth_vericode
oauth_client_ip 用户的IP地址(可选),int型

  返回的参数如下:

参数 含义
oauth_token 具有访问权限的access_token
oauth_token_secret access_token的密钥
openid
在第一步和本步骤中都返回了openid。使用本步骤返回的openid,更为安全

timestamp openid的时间戳
oauth_signature 针对openid的签名值

  4.3、通过Access token(数据令牌)调用API接口,获取用户授权资源

  请求Url:http://openapi.qzone.qq.com/user/get_user_info (这里默认写的是get_user_info接口  请求参数:

参数 含义
oauth_consumer_key 分配给网站的appid
oauth_token 上一步返回的oauth_token
oauth_nonce 随机数,int型
oauth_timestamp unix时间戳(从UTC时间1970年1月1日00:00:00到当前时刻的秒数,不同语言中如何获取请google/baidu之)。
oauth_version 版本号,固定使用1.0
oauth_signature_method 签名方法,固定使用HMAC-SHA1
oauth_signature 签名值,用来提高传输过程参数的防篡改性。

签名值的生成详见【QQ登录】签名参数oauth_signature的说明

openid 上一步返回的openid。
oauth_client_ip 用户的IP地址(可选),int型

  好了,上面就是整个QQ OAuth1.0认证流程中Url参数的请求与返回说明,这OAuth1.0认证中,你会发现参数特别多,还有经过HMAC-SHA1加密、签名等操作,特别麻烦、繁琐,所以还是最好推荐使用OAuth 2.0认证协议进行接口开发。

  下面这篇文章是QQ登录制作过程中,公共返回码说明(包含1.0、2.0),供大家参考,看是哪个阶段出错,然后对症下药,特别是参数的请求、传递是否正确,还有一个参数顺序、签名是否正确,这四点弄好,相信这个东西自然就实现了。

  OAuth_QQ登录_公共返回码说明:点击进入

  最后将自己开发制作的OAuth 1.0源代码分享给大家,代码分享:点击下载

  5、OAuth2.0的认证流程

  在OAuth2.0的处理流程,主要分为以下四个步骤:

  1)得到授权码code

  2)获取access token

  3)通过access token,获取OpenID

  4)通过access token及OpenID调用API,获取用户授权信息

  上面是流程的大概四个步骤,在下面的流程示意图中会得到体现,这是我制作的一个幻灯片的流程图(文章最后会附上制作的OAuth幻灯片分享给大家),这里就直接截图下来进行讲解:

  第一步:首先直接跳转至用户授权地址,即图示 Request User Url ,提示用户进行登录,并给予相关资源授权,得到唯一的Auth code,这里注意的是code只有10分钟的有效期,对于安全考虑,相对于OAuth 1.0省了一步获取临时的Token,并且有效期也进行了控制,比1.0认证简化了很多,并安全一些;

  第二步:得到授权code后,这一步就是请求access token,通过 图示 Request access url ,生成得到数据Token;

  第三步:通过Access Token请求OpenID,OpenID是用户在此平台的唯一标识,通过图示 Request info url 请求,然后得到OpenID;

  第四步:通过第二步得到的数据Token、第三步得到的OpenID及相关API,进行请求,获取用户授权资源信息。(我喜欢简洁明了,OAuth2.0认证流程就是这样,相信通过图示及讲解都能明白,若有不明白之处请留言)

  最后,分享自己关于OAuth1.0、2.0认证流程讲解的幻灯片,结合文章来看,你会更容易理解。

课件分享:点击下载 (麻烦保留博主信息,谢谢)

时间: 02-04

OAuth的机制原理讲解及开发流程的相关文章

OAuth的机制原理讲解及开发流程 (转)

本想前段时间就把自己通过QQ OAuth1.0.OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,可一直很忙,今天抽点时间说下OAuth1.0协议原理,及讲解下QQ对于Oauth1.0的认证开发.闲话多说了点,下面直接进入主题. 1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的.(我喜欢简单明了,这里没看懂,没关系,

OAuth的机制原理讲解及开发流程(转)

1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的.(我喜欢简单明了,这里没看懂,没关系,接着往下面看) 2.OAuth的原理 (流程图) 我在图上分了四个步骤,下面是四步的讲解: 第一步:用户访问第三方网站,比如:就是你需要使用QQ进行登录的网站: 第二步:你点击QQ登录后,第三方网站将会连接并进行请求,比如:你点击登录后,第三方网站会跳转

VR原理讲解及开发入门

本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持. 1. VR沉浸感和交互作用产生的原理: 在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR上次发布过一篇文章<一张图让你认识VR>,在其中,你会看到很多10年前的虚拟现实装备,他们基本是平面显示器,或者将产生的画面投影到一个弧形甚至是球形屏幕上:或者在这些屏幕上叠加左右眼分别的图像,从而产生更加立体的效果. 而这类装置往往很大型,也很昂贵. 而近几年发展起来的VR头戴显示器,则达到了更好的使用

java中反射机制原理讲解

 反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接.但是反射使用不当会成本很高! 看概念很晕的,继续往下看. 二,反射机制的

项目实战 | 月薪3w的大牛为你整理的真实项目开发流程

如今,越来越多的人重视有项目经验的程序员,在一定基础上,项目经验代表着你曾经的"成就",公司也更愿意向这部分程序员抛去橄榄枝.如果你没有什么项目经验,那么一定要在网上找一个中等大小的项目,然后代码看透,逻辑理清楚,然后写到自己的简历上,至少让面试官觉得你做这个项目肯定没有问题,你能干活,所以很可能就会通过面试! 现在为大家介绍,一个项目的大体开发流程 1 大体的项目开发流程 各模块的开发流程要能讲述--技术点的用处,大体概括不需要详细讲解. 2 自己开发的模块 必须熟练开发流程.原理:

oAuth的认知以及开发流程

什么是OAUTH OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的.oAuth是Open Authorization的简写. OAUTH定义 OAUTH是一种开放的协议,为桌面.手机或web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务.OAUTH类似于Flickr Auth.Go

看大师讲解移动互联网前端开发流程

你做过移动互联网开发吗?在移动互联网超级火爆的今天,你是否也想分的一杯羹呢,来这里看大师给你讲解如何完成一款app,本文的主旨在于讲解在app的制作流程. 今天完成了完全属于自己的一款安卓应用,整个流程都是我一个人跑下来的,感觉小有成就,名字叫"长见识了",是一款趣味答题类的游戏,题目各种火爆各种经典,下载地址,看似一个简单的答题小游戏却是五脏俱全,从开发流程上都进行了严格的规范,大家有空可以下载玩玩~ 该项目虽然比较简单,但是从项目需求分析到最后的开发测试上架流程都是完备了的. 一,

FPAG结构 组成 工作原理 开发流程(转)

FPGA组成.工作原理和开发流程 备注:下面的描述基于ALTERA系列的FPGA芯片,而且是第一次学习FPGA,其中的一部分内容是参考一些资料总结的,个人独特的分析和见解还偏少. 1. FPGA概述 FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL.GAL.EPLD等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点 2

软件开发流程(转载)

软件开发流程 迭代化软件开发技术 1. 传统开发流程的问题 传统的 软件开发流程是一个文档驱动的流程,它将整个软件开发过程划分为顺序相接的几个阶段,每一个阶段都必需完毕所有规定的任务(文档)后才可以进入下一个阶段. 如必须完毕所有的系统需求规格说明书之后才可以进入概要设计阶段,编码必需在系统设计完毕之后才可以进行.这就意味着仅仅有当所有的系统模块所有开发完毕之 后,我们才进行系统集成,对于一个由上百个模块组的复杂系统来说,这是一个很艰巨而漫长的工作. 随着我们所开发的软件项目越来越复杂,传统的瀑