`
mengdejun
  • 浏览: 408018 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

OAUTH协议

    博客分类:
  • Php
阅读更多

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。

 

 

OAUTH简介

  OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。   在官方网站的首页,可以看到下面这段简介:   An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.   大概意思是说OAUTH是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAUTH类似于Flickr Auth、Google's AuthSub[1]、Yahoo's BBAuth、 Facebook Auth等。OAUTH认证授权具有以下特点:   1. 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;   2. 安全:没有涉及到用户密钥等信息,更安全更灵活;   3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;
OAUTH产生的背景  
典型案例:如果一个用户拥有两项服务:一项服务是图片在线存储服务A,另一个是图片在线打印服务B。如
  下图所示。由于服务A与服务B是由两家不同的服务提供商提供的,所以用户在这两家服务提供商的网站上各自注册了两个用户,假设这两个用户名各不相同,密码也各不相同。当用户
  

  

要使用服务B打印存储在服务A上的图片时,用户该如何处理?法一:用户可能先将待打印的图片从服务A上下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下;法二:用户将在服务A上注册的用户名与密码提供给服务B,服务B使用用户的帐号再去服务A处下载待打印的图片,这种方式效率是提高了,但是安全性大大降低了,服务B可以使用用户的用户名与密码去服务A上查看甚至篡改用户的资源。
  很多公司和个人都尝试解决这类问题,包括Google、Yahoo、Microsoft,这也促使OAUTH项目组的产生。OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供一个开放的标准。OAuth规范的1.0版于2007年12月4日发布。
OAUTH相关术语 
 
在弄清楚OAUTH流程之前,我们先了解下OAUTH的一些术语的定义:
  OAUTH相关的三个URL: Request Token URL: 获取未授权的Request Token服务地址; User Authorization URL: 获取用户授权的Request Token服务地址; Access Token URL: 用授权的Request Token换取Access Token的服务地址;
  OAUTH相关的参数定义: oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.ya hoo.c om/dashboard/ oauth_consumer_secret:oauth_consumer_key对应的密钥。 oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。 oauth_signature: 用上面的签名方法对请求的签名。 oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。 oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。 oauth_version: OAUTH的版本号,可选,其值必须为1.0。 OAUTH HTTP响应代码:
  HTTP 400 Bad Request 请求错误 Unsupported parameter 参数错误 Unsupported signature method 签名方法错误 Missing required parameter 参数丢失 Duplicated OAuth Protocol Parameter 参数重复 HTTP 401 Unauthorized 未授权 Invalid Consumer Key 非法key Invalid / expired Token 失效或者非法的token Invalid signature 签名非法 Invalid / used nonce 非法的nonce

OAUTH认证授权流程

  在弄清楚了OAUTH的术语后,我们可以对OAUTH认证授权的流程进行初步认识。其实,简单的来说,
  OAUTH认证授权就三个步骤,三句话可以概括:
  1. 获取未授权的Request Token
  2. 获取用户授权的Request Token
  3. 用授权的Request Token换取Access Token
  当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家肯能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。
  具体每步执行信息如下:
  A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数见上图。
  B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。
  C. 使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。
  D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。
  E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。
  F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。
  G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。
  从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。用OAUTH实现背景一节中的典型案例:当服务B(打印服务)要访问用户的服务A(图片服务)时,通过OAUTH机制,服务B向服务A请求未经用户授权的Request Token后,服务A将引导用户在服务A的网站上登录,并询问用户是否将图片服务授权给服务B。用户同意后,服务B就可以访问用户在服务A上的图片服务。整个过程服务B没有触及到用户在服务A的帐号信息。如下图所示,图中的字母对应OAUTH流程中的字母:
  • 大小: 9.6 KB
  • 大小: 4.3 KB
分享到:
评论

相关推荐

    OpenID与OAuth协议详解

    **OAuth协议** OAuth则是一种授权框架,允许第三方应用在用户许可的情况下访问其私有资源,如社交媒体数据或云存储文件,而无需获取用户的用户名和密码。 2.1 **OAuth简介** OAuth允许用户授权第三方应用访问他们...

    OAuth协议的PHP库.zip

    OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、...

    OAuth协议1.0版本中文版

    OAuth协议是一种开放标准,用于授权第三方应用访问用户在另一服务上的资源,而无需分享用户名和密码。OAuth1.0版本是这个协议的早期版本,它为互联网应用提供了一个安全、可扩展的框架,使得第三方开发者可以安全地...

    OAuth协议 - 基本流程

    博文链接:https://robustwang.iteye.com/blog/2399663

    Twitter OAuth协议的PHP库.zip

     }OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如...

    OpenId与OAuth协议详解

    OpenID是一个开放式标准,它主要描述了在用户在分布式系统的认证方式以及提供了一套额外的服务系统允许用户方便...OAuth协议最初的出现是为了解决不同网站和其他互联网服务商访问受保护的资源这个普遍性问题而设计的。

    OAuth协议安全分析.pdf

    OAuth协议安全分析.pdf

    OAuth协议 介绍

    OAuth协议致力于使网站和应用程序(统称为消费方)能够在无须用户透露其认证证书的情况下,通过API访问某个web服务(统称为服务提供方)的受保护资源。更一般地说,OAuth为API认证提供了一个可自由实现且通用的方法...

    OAuth2.0协议中文版.pdf

    OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用...

    OAuth2.0协议中文版

    OAuth 2.0 协议中文译本共分为九大部分,分别介绍了 OAuth 2.0 协议的背景知识、术语中英对照表、OAuth 2.0 协议的中文译本、OAuth 2.0 协议的工作流程、OAuth 2.0 协议的安全机制、OAuth 2.0 协议的优点、OAuth 2.0...

    使用OAuth协议来认证或登录各种微博

    OAuth协议是一种授权机制,常用于在线服务提供商与第三方应用之间的身份验证和数据交换。在本文中,我们将深入探讨如何利用OAuth协议实现微博平台的认证和登录功能,以及如何通过源码学习这一过程。 首先,OAuth...

    nemiro.oauth.dll:Nemiro.OAuth是一个类库,用于通过.NET Framework中的OAuth协议进行授权

    Nemiro.OAuth是一个类库,用于通过.NET Framework中的OAuth协议进行授权。 该库提供了用于实现OAuth客户端的机制,还包含一个流行网站的即用型客户端。 Nemiro.OAuth是根据Apache许可证版本2.0发行的。 要安装...

    jmeter 实现oauth1.0授权认证

    总结来说,实现JMeter中的OAuth 1.0认证需要对OAuth协议有深入理解,并结合BeanShell的Java脚本能力来生成正确的签名。这虽然比直接使用支持OAuth的工具更复杂,但对于自定义测试场景或在没有其他选项的情况下,这是...

    新浪微博OAuth授权的Java实现.pdf

    一、 OAuth协议简介 OAuth协议是一种广泛使用的授权协议,使用户不需要直接向第三方应用提供用户名及密码,且使一个账户在多个网站中使用成为可能。OAuth协议的细节描述可参考其官方网站:http://oauth.net目前...

    oauth-signpost开源项目

    OAuth Signpost是一个专门为Java开发者设计的开源库,它简化了OAuth协议的实现,使得开发者能够更轻松地在自己的应用程序中集成OAuth授权功能。OAuth是一种开放标准,主要用于安全地授权第三方应用访问用户存储在另...

    Oauth测试工具

    OAuth测试工具则是针对OAuth协议进行验证和调试的应用,尤其适用于微博开发测试,确保开发者能够正确地实现OAuth签名过程,从而顺利获取和使用用户的授权信息。 在微博开发中,OAuth扮演着至关重要的角色。它为用户...

Global site tag (gtag.js) - Google Analytics