OAuth
一 概述

    本系统采用的是简化版的OAuth开放授权协议,允许第三方应用访问服务提供方中注册的终端用户的某些资源,且不会把帐号和密码提供给第三方。OAuth 允许通过服务提供商授予的一个临时令牌而不是用户名密码来获取用户的资源,这些资源可以是受限的,令牌的时间段也可以是受限的,开放平台采用的是1.0a的标准。开放平台在访问用户资源(用户资料、随笔、照片等)需先经过认证获取用户授权,持用户下发的令牌交换获得资源,开放平台认证完全遵循OAuth标准,整个流程可分为3步:获取系统下发的临时令牌、用临时令牌交换用户下发的令牌、用用户下发的令牌交换资源。在整个流程中不会暴露用户的敏感信息。同时在每个步骤中都需要进行签名、构造时间戳。

二 OAuth端点
2.1 RequestToken

  由第三方应用向服务提供者请求临时的Token及临时的私钥。

2.2 AccessToken Request

  用授权后的RequestToken交换Access Token。

三 授权流程
3.1 授权流程图

3.2 请求签名

   所有的OAuth请求使用同样的算法来生成(signature base string)签名字符基串和签名。 base string是把请求URL以及请求参数用&字符连起来后做URL Encode编码(RFC 3986规范)。具体来讲,base string由http方法名,之后是&,接着是过url编码(url-encoded)之后的url和访问路径及&。接下来,把所有的请求参数包括POST/GET方法体中的参数,经过排序(按参数名进行文本排序,如果参数名有重复则再安参数值进行重复项目排序),使用%3D替代=号,并且使 用%26作为每个参数之间的分隔符,拼接成一个字符串。这个算法可以简单表示为:

                  url_encode( base_uri ) + "&" +
          sorted_query_params.each  { | k, v |
              url_encode ( k ) + "%3D" +
              url_encode ( v )
          }.join("%26")
          
  无论生成何种OAuth请求,生成BASE STRING的规则始终不变,BASE STRING通过密钥即可生成签名,开放平台目前签名算法仅支持HMAC-SHA1,
密钥SecretKey由开放平台颁发给第三方系统或应用。
3.3 获取临时令牌Request Token接口
3.3.1 API URL
3.3.2 支持格式

  HTTP 标准认证返回格式 

3.3.3 HTTP请求方式

  GET

3.3.4 请求参数


           参数名         必选                          介绍
consumerKeytrueAPIKey(由开放平台颁发给第三方系统或应用);

sign

true签名值,密钥为:SecretKey,SecretKey由开放平台颁发给第三方系统或应用;
timeTamptrue时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数,与服务器时间间隔不能超过10分钟;
callBackUrltrue用户授权成功后浏览器会被重定向到这个url中,如果您的应用是C/S客户端请将此值设为oob。
3.3.5 返回结果

   结果示例:

  55d4bb5aea7f30ab5cd0b31a50be960e

  结果说明:返回的字符串为临时令牌,其使用期限只有10分钟。
3.3.6 特别说明

  本步骤用于签名的密钥为SecretKey,SecretKey由开发平台颁发给第三方;如果应用为C/S客户端,则callBackUrl设为oob。

3.4 用临时令牌交换用户令牌
3.4.1 API URL
3.4.2 支持格式

  HTTP 标准认证返回格式

3.4.3 HTTP请求方式

  GET 

3.4.4 请求参数
参数名必选  介绍
tokentrue上一步中获得的临时令牌
3.4.5 访问URL样例
3.4.6 返回参数

          参数名

必选介绍
accessTokentrue用户令牌
accessSecrettrue用户密钥
3.4.7 特别说明

   此步骤拥有UI界面,当用户授权后,Web应用系统会重定向至第一步传递的参数callBackUrl地址中,同时携带accessToken和accessSecret两个参数,将accessToken与accessSecret Get至callBackUrl;C/S客户端应用(callBackUrl=oob),浏览器不会重定向至callBackUrl,callBackUrl将会输出到网页上(Form名为oobFrm下两个隐藏域中:accessToken、accessSecret),同时会将此值附加到API URL的后面(如下面样例),C/S客户端可通过监控URL获取授权码。

  http://api.hengqian.net/openApi/sessionKey/Authorize?token=55d4bb5aea7f30ab5cd0b31a50be960e#accessToken=

sdsddsdsssas5646445&accessSecret=asdasdasdasd123123

3.5 使用Access Token访问或修改受保护资源

  以上步骤主要用于第三方系统用户认证过程。用Access Token与Access Token Secre 即可访问用户资料等资源,API访问请直接查看开放接口API相关介绍。