OAuth学习笔记

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

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站) 在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的 服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

OAUTH认证授权具有以下特点:

  • 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用。
  • 安全:没有涉及到用户密钥等信息,更安全更灵活;
  • 开放:任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务;

在认证和授权的过程中涉及的三方包括:

  • 服务提供方(Service Provider),用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。
  • 用户(User),存放在服务提供方的受保护的资源的拥有者。
  • 客户端(Consumer),要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。

使用OAuth进行认证和授权的过程如下所示:

  • 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相关的三个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。
  • 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

参考资料

http://oauth.net/

http://article.yeeyan.org/view/freewizard/4418

引用于:http://www.biaodianfu.com/learn-oauth.html

posted @ 2011-09-30 14:57  orenal  阅读(269)  评论(0编辑  收藏  举报