豆瓣 API OAuth认证本文档提供豆瓣API OAuth认证的相关信息,如果你的应用需要访问或修改受保护的用户数据,请详细阅读本文档。 为了保护豆瓣用户的数据,当第三方应用需要通过API访问或修改受保护的用户数据(例如增删用户收藏)时,需要通过OAuth认证机制来获得用户的授权。 为了方便开发人员进行豆瓣 OAuth认证,我们在豆瓣OAuth认证示例项目中提供了常见语言环境下进行豆瓣 OAuth认证的示例代码。如果你使用或参考示例项目中的代码,而你对OAuth一无所知,那么你需要阅读我们在下面提供的认证及访问资源流程这部分内容。它可以帮助你理解OAuth的认证流程,这对于理解示例项目中的代码是必须的。同时你也需要阅读常见问题部分。 如果你不打算参考我们提供的示例代码,或者你所使用的语言不在我们提供的示例代码中。那么在开始尝试进行OAuth认证之前,你通常必须阅读整个OAuth规范。 无论你是何种开发人员——比如你也许已经是OAuth专家,我们都建议你阅读常见问题部分,以避免不必要的麻烦。 如果你发现本文档的某些部分难以理解,建议你阅读OAuth规范以获取更多信息。 另外一些可能有用的资源:
目录认证流程及访问资源流程豆瓣API通过以下四个步骤来完成认证授权并访问或修改受限资源的流程
获取未授权的Request Token通过访问以下 URL 获取未授权的 Request Token http://www.douban.com/service/auth/request_token 包含的主要参数
本步骤用于签名的secret是API Key Secret 返回值包括未授权的Request Token和对应的Request Token Secret 请求用户授权Request Token获得Request Token之后,需要请求用户授权该Request Token 你需要将浏览器跳转到如下URL(如果无法自动跳转,则需要提示用户手工跳转)。这会是一个豆瓣上的页面,提示用户授权给你的应用,以允许你的应用访问该用户在豆瓣上的信息 http://www.douban.com/service/auth/authorize 跳转后用户会看到请求授权的页面,用户可以选择同意或者拒绝授权 该请求包含如下两个参数
使用授权后的Request Token换取Access Token用户完成授权后,第三方应用可以通过访问如下url,将已授权的Request Token换取Access Token。Access Token将被用于访问或修改受限资源 http://www.douban.com/service/auth/access_token 包含的主要参数
本步骤用于签名的secret和token secret分别为,API Key Secret和Request Token Secret 返回值包括授权的Access Token,对应的Access Token Secret 使用Access Token访问或修改受保护资源获得Access Token之后,你的应用就可以使用该Access Token访问或修改受保护的资源 在每次操作受保护资源时,请求都必须包含以下参数
本步骤用于签名的secret和token secret分别为,API Key Secret和Access Token Secret 常见问题关于用于签名的Secret在第一步获取Request Token时,需要使用API Key和API Key Secret进行签名。对应到OAuth规范中,API Key对应Consumer Key,API Key Secret对应Consumer Key Secret。该步不需要使用Token和Token Secret——设为空字符串即可。 在第三步换取Access Token时,需要使用API Key、API Key Secret、Request Token和Request Token Secret进行签名。其中API Key和API Key Secret的对应不变。而Request Token和Request Token Secret对应签名中的Token和Token Secret 而在第四步访问修改受限资源时,需要使用API Key、API Key Secret、Access Token和Access Token Secret进行签名。 请注意区分三次签名中用到的Key、Token和Secret,这是签名不匹配的一个常见原因。 关于用户签名的url签名时需要用到将要访问的url。例如: http://api.douban.com/people/sakinijino/collection 豆瓣OAuth认证,要求对这个url进行转义再计算签名,例如: http://api.douban.com/people/@me 需要被转义为 http://api.douban.com/people/%40me 再计算签名。某些OAuth库默认不对url进行转义,你需要在传入url之前手工进行转义。这是签名不匹配的另一个原因。 关于在修改删除受限资源时传递OAuth参数OAuth规范定义了三种传递OAuth参数方式
然而进行POST、PUT、DELETE请求时,豆瓣暂时不支持使用在url中或者post form中传递OAuth参数。因此你只能选择在header中传递OAuth参数。格式如下: Authorization: OAuth realm="http://sp./", oauth_consumer_key="0685bd9184jfhq22", oauth_token="ad180jjd733klru7", oauth_signature_method="HMAC-SHA1", oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0" 如果你发现豆瓣提示你没有传递OAuth参数(no auth错误),那么请检查一下你是否在POST、PUT、DELETE请求中使用了url或post form传递OAuth参数。 |
|
来自: CevenCheng > 《客户端接口》