OAuth学习笔记


October 8, 2012

http://blog.unvs.cn/archives/oauth-qq1.0-developer.html

 

OAuth1.0认证中URL的调用及参数的传递详解:

http://blog.unvs.cn/archives/oauth-qq1.0-developer2.html

 

http://blog.csdn.net/diyagoanyhacker/article/details/6459210

 

http://www.cnblogs.com/v5wa/archive/2012/06/25/OAuth1a_OpenTQQ.html

http://jiaoyu.7808.cn/zixun/201204/26404.shtml                                                                                           

http://jamie-wang.iteye.com/blog/1182161

维基百科…

http://blog.csdn.net/biangren/article/details/7683340

http://blog.csdn.net/waj89757/article/details/7553828

http://www.cnblogs.com/neutra/archive/2012/07/26/2609300.html what are they different

http://huoding.com/2011/11/08/126  what are they different between old version and newversion?

 

http://blog.csdn.net/zf0216/article/details/6563256

 

新浪微博OAuth2.0 VS OAuth1.0 主要区别总结

http://blog.csdn.net/logan676/article/details/7553822

 

http://article.yeeyan.org/view/50978/307535 OAuth 2.0:通往地狱之路

 

Qzone_OAuth_1.0认证简介

http://wiki.open.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91Qzone_OAuth%E8%AE%A4%E8%AF%81%E7%AE%80%E4%BB%8B

 

http://menglimengwai.iteye.com/blog/496300  比较通俗

 

http://guazi.iteye.com/blog/1569242        Oauth2.0跟Oauth1.0的区别:

http://jamie-wang.iteye.com/blog/1409576    为什么要有2.0版本

http://blog.csdn.net/logan676/article/details/7553822

 

http://www.cnblogs.com/franksunny/archive/2012/05/09/2492149.html  OAuth1.0协议整理

http://www.cnblogs.com/yjf512/archive/2011/08/31/2161259.html  为什么出现OAuth2.0?

 

 

http://openapi.baidu.com/wiki/index.php?title=OAuth1.0  百度开发者中心

 

 

什么是OAuth?

OAuthOpen Authorization,开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

 

OAuth协议特点

1.简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;

2.安全:没有涉及到用户密钥等信息,更安全更灵活;

3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

 

OAuth相关术语

概念术语

服务提供方 Service Provider:一个允许通过OAuth访问的web应用程序。

用户 User:在服务提供方处拥有帐号的个人。

消费方 Consumer:一个代表用户以OAuth形式访问服务提供方的网站或应用程序。

受保护资源 ProtectedResource(s):服务提供方所掌控的数据,能被通过用户认证的消费方访问。

消费方开发者 Consumer Developer:实现消费方的个人或组织。

消费方键值 Consumer Key: 消费方用来向服务提供方标示身份的值。

消费方密钥 Consumer Secret:消费方用于建立对消费方键值所有权的密钥。

请求令牌 Request Token:消费方用于从用户处获得授权并换取请求令牌的值。

访问令牌 Access Token:消费方用于代表用户在没有密码的情况下访问受保护资源的值。

令牌密钥 Token Secret:消费方用于建立对特定令牌所有权的密钥。

OAuth协议参数 OAuth Protocol Parameters:参数名称,以oauth_开头。

 

 

OAUTH相关的三个URL

请求令牌URL(Request Token URL): 获取未授权的Request Token服务地址;

用户授权URL(User Authorization URL): 获取用户授权的Request Token服务地址;

访问令牌URL(Access Token URL): 用授权的Request Token换取Access Token的服务地址。

 

 

OAUTH相关的参数定义

oauth_consumer_key: 消费方用来向服务提供方标示身份的ID。该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.yahoo.com/dashboard/

oauth_consumer_secret:oauth_consumer_key对应的密钥。

oauth_token:服务提供方返回令牌参数。最后一次返回的该参数就是访问令牌,有了这个访问令牌,服务B就可以大摇大摆去拥有资源的服务A抓取有权限抓取的资源了。

oauth_token_secret:oauth_token对应的私钥。

oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。

oauth_signature:用上面的签名方法对请求签名生成的签名字符串。

oauth_timestamp:发起请求的时间戳,请求时间戳用格林威治时间1970年1月1日0时0分0秒起的秒数表示,除非服务提供方另外指定。 请求时间戳必须是个正整数,并必须不小于上一个请求中的时间戳。

oauth_nonce:消费方必须为一个时间戳的所有请求的生成不同的单次值。单次值是一个随机字符串,是为每次请求生成的唯一值。服务提供方用单次值验证一个请求之前从未被发起过,有助于防止非安全通道(例如HTTP)上的重放攻击。

oauth_version:OAUTH的版本号,可选,其值必须为1.0。

以上参数名称和值都是大小写敏感的。关于参数的更多规定详见

http://www.rollingcode.org/blog/f/oauth-core-1.0-final-cn.html

 

OAUTH  HTTP响应代码

HTTP400 Bad Request 请求错误

Unsupportedparameter 参数错误

Unsupportedsignature method 签名方法错误

Missingrequired parameter 参数丢失

DuplicatedOAuth Protocol Parameter 参数重复

HTTP401 Unauthorized 未授权

InvalidConsumer Key 非法key

Invalid/ expired Token 失效或者非法的token

Invalidsignature 签名非法

Invalid/ used nonce 非法的nonce

 

OAUTH认证授权流程

1.获取未授权的Request Token

2.获取用户授权的Request Token

3.用授权的Request Token换取Access Token

1. Request Token   用于获取未授权的访问令牌

2. User Authorization  重定向的 URI,让用户授权

3. Access Token Request  获取访问令牌

 

OAuth版本

关于OAuth1.0/1.0a和OAuth2.0:

1.OAuth2.0较1.0相比整个授权验证流程更简单更安全,也是未来最主要的用户身份验证和授权方式。

2.OAuth2.0是OAuth1.0a之后的版本,不向后兼容OAuth 1.0/1.0a,流程更为简单。

3.OAuth1.0/1.0a获取到的AccessToken时效为永久,直到用户取消授权/应用被注销。但是OAuth2.0中AccessToken开始变为时效性(每个平台有效时间不同),同时协议中规定了RefreshToken的实现,在AccessToken失效后,使用RefreshToken去获取新的AccessToken。

 

2009年4月23日,OAuth宣告了一个1.0协议的安全漏洞。该漏洞影响了OAuth 1.0核心规范第6节的OAuth的认证流程(也称作3阶段OAuth) [7] 于是,发布了OAuth Core协议1.0a版本来解决这一问题。[8]

 

 

OAuth在认证和授权的过程中涉及的三方

1.服务提供方 (Service Provider),用户使用服务提供方来存储受保护的资源(如照片,视频, 联系人列表)。

2.用户 (User),存放在服务提供方的受保护的资源的拥有者。

3.客户端 (Client),要访问服务提供方资源的第三方应用,通常是网站(如提供照片打印服务的网站)。在认证过程之前,客户端要向服务提供者申请客户端标识。

 

Auth1.0定义了三种角色:User、Service Provider、Consumer。而OAuth2.0则定义了四种角色:Resource Owner、Resource Server、Client、Authorization Server:

§ Resource Owner:User

§ Resource Server:Service Provider

§ Client:Consumer客户端,要访问服务提供方资源的第三方应用….

§ Authorization Server:Service Provider

也就是说,OAuth2.0把原本OAuth1.0里的Service Provider角色分拆成Resource Server和Authorization Server两个角色,在授权时交互的是Authorization Server,在请求资源时交互的是ResourceServer,当然,有时候他们是合二为一的。

 

 

OAuth协议优点?

在使用中,OAuth不会使第三方网站或应用接触到用户的帐号信息(如用户名与密码),授权后的http通信中也不再传输用户信息而是以数字签名和访问令牌(AccessToken)取代,即使截到数据包,也无法还原出用户的登录信息。这是OAuth最大的优点,也是它得以逐渐成为现在通用的授权标准的原因。

 

 

OAuth2.0的新特性:

6种全新的流程:

User-Agent Flow – 客户端运行于用户代理内(典型如web浏览器)。

Web Server Flow – 客户端是web服务器程序的一部分,通过http request接入,这是OAuth 1.0提供的流程的简化版本。
Device Flow – 
适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器
Username and Password Flow – 
这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。
Client Credentials Flow – 
客户端适用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。
Assertion Flow – 
客户端用assertion去换取access token,比如SAML assertion

 

OAuth2.0的认证流程

1、得到授权码code

2、获取accesstoken

3、通过accesstoken,获取OpenID

4、通过accesstoken及OpenID调用API,获取用户授权信息

 

October 10, 2012

 

 

2.0token存在过期时效,并且必须在过期时进行刷新。所以要对其状态进行管理..

(之所以有token过期一说,是因为要适应自编码token的实现——一种在服务器端无需进行数据库查找即可进行认证的加密token

正因为这种自编码token的存在,他们不可能被回收,只能强制为短时效存在,以此减少遭受危险时带来的损失。)

 

 

1.0                       2.0

UserID                               AccessToken(每次的返回值不一样,1.0的值永远不变)

Access Token                            ExpiresInAccessToken过期时间,S计算,默认可能是1h

AccessTokenSecret           RefreshToken

 

问题:

1. 签名去掉会不会影响安全性?

2. Why the OAuth is safety?

 

Signature

数字签名不是指将你的签名扫描成数字图像,或者用触摸板获取的签名,更不是你的落款。

数字签名在防止篡改,防止重放攻击,保证数据完整性,防止假冒签名,防止签名者抵赖方面更有效。

在中国大陆,数字签名是具法律效力的。

 

OAuth 不会使第三方网站或应用接触到用户的帐号信息(如用户名与密码),授权后的 http通信中也不再传输用户信息而是以数字签名和访问令牌(Access Token)取代,即使截到数据包,也无法还原出用户的登录信息。这是OAuth最大的优点,也是它得以逐渐成为现在通用的授权标准的原因。

 

对用户来说方便、安全;对中小第三方网站和应用来说,OAuth可以使它们能够得到用户基本信息外的其他信息资料和账户部分使用权限;对大网站平台来说,OAuth可以完美的解决用户的账户安全和开发者授权的平衡问题。因此 OAuth协议确定后就获得了包括国外 TwitterFacebookGoogle等认可,之后在国内也得到了有效跟进。

 


 

什么是OAuth?

OAuthOpen Authorization,开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

 

OAuth协议特点

1.简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;

2.安全:没有涉及到用户密钥等信息,更安全更灵活;

3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

 

OAuth版本

OAuth1.0、OAuth1.0a和OAuth2.0:

1.OAuth2.0较1.0相比整个授权验证流程更简单更安全,也是未来最主要的用户身份验证和授权方式。

2.OAuth2.0是OAuth1.0a之后的版本,不向后兼容OAuth 1.0/1.0a,流程更为简单。

3.OAuth1.0/1.0a获取到的AccessToken时效为永久,直到用户取消授权/应用被注销。OAuth2.0中AccessToken开始变为时效性,在AccessToken失效后,使用RefreshToken去获取新的AccessToken。

 

 

oauth2.0提出了多种流程,各个客户端按照实际情况选择不同的流程来获取access_token

 

比如最典型的6中流程有 :

1.Web Server Flow 客户端是web服务器程序的一部分,通过httprequest接入,这是OAuth 1.0提供的流程的简化版本。

2.User-Agent Flow 客户端运行于用户代理内(典型如web浏览器)。

3.Device Flow 适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器

4.Username and Password Flow 这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。

5.Client Credentials Flow 客户端适用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。

6.Assertion Flow 客户端用assertion去换取access token,比如SAMLassertion

 


大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑



OAuth 2.0:通往地狱之路
http://article.yeeyan.org/view/50978/307535


Qzone_OAuth_1.0认证简介
http://wiki.open.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91Qzone_OAuth%E8%AE%A4%E8%AF%81%E7%AE%80%E4%BB%8B


比较通俗
http://menglimengwai.iteye.com/blog/496300


2.0的token存在过期时效,并且必须在过期时进行刷新。所以要对其状态进行管理..
(之所以有token过期一说,是因为要适应自编码token的实现——一种在服务器端无需进行数据库查找即可进行认证的加密token。
正因为这种自编码token的存在,他们不可能被回收,只能强制为短时效存在,以此减少遭受危险时带来的损失。)


签名去掉会不会影响安全性?
(Signature)
数字签名不是指将你的签名扫描成数字图像,或者用触摸板获取的签名,更不是你的落款。
数字签名在防止篡改,防止重放攻击,保证数据完整性,防止假冒签名,防止签名者抵赖方面更有效。
在中国大陆,数字签名是具法律效力的。



1.0                          2.0
UserID AccessToken(每次的返回值不一样,1.0的值永远不变)
AccessToken ExpiresIn (AccessToken过期时间,S计算,默认可能是1h)
AccessTokenSecret RefreshToken 


http://blog.csdn.net/logan676/article/details/7553822


Oauth2.0跟Oauth1.0的区别:
http://guazi.iteye.com/blog/1569242


为什么要有2.0版本
http://jamie-wang.iteye.com/blog/1409576


OAuth 不会使第三方网站或应用接触到用户的帐号信息(如用户名与密码),授权后的 http 通信中也不再传输用户信息而是以数字签名和访问令牌(Access Token)取代,即使截到数据包,也无法还原出用户的登录信息。这是OAuth 最大的优点,也是它得以逐渐成为现在通用的授权标准的原因。
对用户来说方便、安全;对中小第三方网站和应用来说,OAuth 可以使它们能够得到用户基本信息外的其他信息资料和账户部分使用权限;对大网站平台来说,OAuth 可以完美的解决用户的账户安全和开发者授权的平衡问题。因此 OAuth 协议确定后就获得了包括国外 Twitter、Facebook 和 Google 等认可,之后在国内也得到了有效跟进。


--------------------------------------------------------------------------------------------------------- 

http://blog.163.com/nice_2012/blog/static/1926661482012040394655/
腾讯微博开放平台
http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E


The different。
http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E
http://wiki.dev.app.360.cn/index.php?title=OAuth_1.0a%E6%96%87%E6%A1%A3&oldid=746
http://open.t.163.com/wiki/index.php?title=OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E#OAUTH1.0.E5.8D.8F.E8.AE.AE.E4.BB.8B.E7.BB.8D
http://openapi.baidu.com/wiki/index.php?title=OAuth1.0
http://wiki.open.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91Qzone_OAuth%E8%AE%A4%E8%AF%81%E7%AE%80%E4%BB%8B
http://open.t.sohu.com/en/OAuth_%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81#%E6%BA%90%E4%BB%A3%E7%A0%81%E4%B8%8B%E8%BD%BD

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值