金山快盘API OAuth认证简单示例

之前百度有免费提供存储服务BCS但没过多久就开始收费了(呵呵),最近想将一些数据上传到网络中,所以搜索了下发现金山快盘有提供相应的免费API,看起来应该比百度要靠谱点(百度竟然曾经还提供过百度网盘API,再次呵呵)。所以准备小小地研究下。

金山快盘API使用了OAuth1.0的认证方式,也就是说要使用API需要先认证授权,当然最基本的我们需要一个快盘帐号,然后我们可以在快盘的开放平台注册一个应用,很简单,点击这里进行创建www.kuaipan.cn/developers/create.htm,没有什么特别的地方,创建完成后我们在我的应用里就可以看到consumer_key以及consumer_secret,这是我们需要的东西。

创建完应用并设置了访问权限并不代表着你已经被授权了,所以不要太激动,授权这部分我们需要走三个步骤
一、获取一个临时的token
使用这个token我们就可以进行第二步了
二、使用上面获取的token在浏览器中打开某个网址开始授权你的应用(网址我等会再说)
三、确定授权成功后我们需要再次获取一个oauth_token,此token我们要保存下来,以来使用API就要用它了,它的时限官方提供大概是一年的时间

以上三步可以在官网中的OAuth授权机制网页中看到,地址是www.kuaipan.cn/developers/document_oauth.htm

下面我来说说这三步吧,在此之前我先贴出来一些参数,这些参数称之为oauth参数表

oauth_consumer_key Y string consumer_key
oauth_token Y string access_token
oauth_signature_method N string 请填”HMAC-SHA1″
oauth_signature Y string 本次请求的签名
oauth_timestamp Y string 时间戳
oauth_nonce Y string [0-9A-Za-z]随机字符串,长度介于16-32字节。每次请求请使用不同的nonce。
oauth_version N string 请填”1.0″

千里之行始于脚下,有了上面的参数,我们开始我们授权的第一步,获取一个临时的token
要获取这个临时的token我们使用将上面的参数发送到这个链接
https://openapi.kuaipan.cn/open/requestToken
上面的参数中只有一个参数是我们需要特别注意的,那就是请求签名,签名的算法在这里可以看到
www.kuaipan.cn/developers/document_signature.htm

我来说下这个签名算法的具体过程。
这个签名大体上可以分三步(又是三步),其实也很简单,与其说是三步不如说是三个部分,哪三个部分呢。
一、HTTP请求方法
二、要访问的基链接(即没有参数的链接,不包括问号的前半部分,如本例是https://openapi.kuaipan.cn/open/requestToken)进行URL编码
三、访问的参数(不包括问号),这里特别要注意的一点是访问的参数要以字典的顺序进行排列,什么叫字典的顺序呢,就是以字符串中前几位或全部位字符的ascii编码小者在前,大都在后,也就可以看成了字符串以“小”进行排序了,这点是需要特别注意的,不然你无法继续,如本例中我们的参数有auth_consumer_key,oauth_nonce,oauth_signature_method,oauth_timestamp,
oauth_version。没错这就是已经按字典排序后排列出来的。将这些参数进行编码。

最后使用&按顺序将三部分连接起来,这样基串就算是完成了,看起来好像很复杂的样子,待会等我放代码的时候你就会发现也不过如此而已,所以一切都在代码里,现在还没搞清楚没关系,很快你就会明白了。

签名算法中的第一部分算是完成了(什么,对没错,这是整个签名算法中三个部分中的第一个部分!)
第二个部分就简单很多了,我们需要使用的密钥,很简单,这个密钥我们是有的,即你创建的应用中的consumer_secret,这个部分与其说是一个部分倒不如说就是第三部分,好吧我们细化一点,就说它是第二部分,这部分需要注意的有两点,一如果我们访问的参数中有oauth_token这个参数的话那么我们这个部分(其实它是下一步HMAC-SHA1算法中的key,我们就叫它key吧),那么我们的key是这样的consumer_secret&oauth_token,而如果我们访问的链接中没有oauth_token这个参数的话,那么就不需要oauth_token,记住我说的是没有oauth_token是没有oauth_token哦,所以&还是要的^_^。

签名算法的最后一步,将上面生成的基串以第二部分生成的key进行HMAC-SHA1运算,得到签名,将该签名再进行base64编码,再进行url编码(这个签名好可怜= =)
至此我们得到了完整的签名了,不要着急,下面我们将这个参数加入到前面的链接上去,还记得吗https://openapi.kuaipan.cn/open/requestToken,之前的参数也不要忘了哦,我们加入的参数是oauth_signature,参数的值是我们得到的签名。

现在,对就是现在,我们可以访问那个该死的链接了,使用那些该死的参数,记住,我们的目标是什么,我们的目标当然不是没有蛀牙,我们的第一个目标是获取一个临时token,这个临时的token有什么用呢?我马上告诉你。

如果上面的步骤你没有做错的话,那么服务器就应该返回给你一些东西,当然意外也并不是没有,天灾人祸什么的时有发生,这就看你RP如何了,开个玩笑,一般是不会有问题的,返回的数据是json格式的,内容大概是这个样子的
{
“oauth_token_secret”: “b3697c3165ad473a864ae4d295003d0d”,
“oauth_token”: “8519c219d45545ce8d4fb423140c9061”,
“oauth_callback_confirmed”: False
}
我们需要的正是oauth_token当然oauth_token_secret也是我们需要的,所以保存起来。

现在我们进行授权认证的第二步,我希望你还记得我们刚刚只是完成了授权的第一步^-^,第二步是灰常灰常滴简单,我们只需要人工封装一个链接并使用浏览器就可以完成(没错,你需要一个浏览器,什么我之前没告诉过你吗,好吧现在我告诉你了)。
第二步我们将上面得到的oauth_token连接到https://www.kuaipan.cn/api.php?ac=open&op=authorise中,然后使用浏览器访问,开始授权。让我们来看看示例中我们返回的oauth_token是什么,是8519c219d45545ce8d4fb423140c9061,很显然我们要访问的链接是
https://www.kuaipan.cn/api.php?ac=open&op=authorise&oauth_token=8519c219d45545ce8d4fb423140c9061
不要点这个哦,这只是一个示例,认真你就输了。。。。。。

打开这个网页我们输入用户名和密码然后授权,没错你需要一个浏览器,我再说一次,当然如果你想使用其它方法的话,比如抓取网页找到POST的参数和方法,那么你完全可以这么做,我捍卫你这么做的权力。
如果一切顺利的话,注意我是说顺利,如果你因为RP或其它问题而出现些莫名其妙啊灵异啊等等问题那就另当别论了,我们就按正常的步骤来吧,现在是已经授权成功了,但别忘了,这只是我们整个授权的第二步而已,我们还要有第三步,第三步事实上是获取了一个真正有用的token,这个token按着官方的说法时限是一年的样子,所以你一定要保存好这个token,以后的操作就全仰仗它了,我们为何要如此大费周张,没错,只是为了得到你而已。

第三步跟第一步差不多,不同的是我们多了一个参数,没错这个参数就是我们得到的token,当然作为HMAC-SHA1算法中key的存在,我们还需要返回的oauth_token_secret,所以上面我让你保存了,你保存了吗?
第三步要访问的链接是https://openapi.kuaipan.cn/open/accessToken,参数中多了一个oauth_token,key中多了一个oauth_token_secret。
首先我们当然还是要需要oauth_signature参数,我希望你没有忘记我们是如何得到签名的,没错,以后的操作中,我们都需要得到这个签名,这是勿容置疑的!我们要访问的参数按字符顺序是oauth_consumer_key,oauth_nonce=,oauth_signature_method,oauth_timestamp,
oauth_token,oauth_version,我们的key是,
consumer_secret&oauth_token_secret
上面返回的那个oauth_token_secret希望你还没忘记。
这里说明一下,我们只有在生成签名的时候参数才会要求按字典顺序进行排列,而到访问链接的时候这个顺序是不作要求的,很抱歉我现在才告诉你。
然后再生成的签名加入到前面的链接中一大堆参数中进行访问,如果没有意外,我们就得到了翘首以盼的时限为一年的oauth_token了,返回的依旧是json数据,说一下,快盘返回的数据均是json格式,也很抱歉到现在才告诉你们这个。
返回的json数据大概是这个样子的
{
“oauth_token_secret”: “e76ccab72f9f44f1a445d15b798c4fd2”,
“oauth_token”: “fe6265afa5c74866a62573b34ca411fb”,
“user_id”: 101,
“charged_dir”: “0”
}

保存好这个oauth_token以及oauth_token_secret,这是我们后面使用API中所需要的必要参数,再说一遍,按照官方说法,这个token时限是一年。

好了,我们得到了我们想要的东西,现在我们就可以利用它来使用快盘API进行各种操作了,包括查看用户信息,获取文件(夹)信息,创建/删除文件,上传/下载文件,移动/复制文件等等。下面就以c语言为例,使用liboauth库进行我们上面的三步认证,最后查看我们的用户信息作为结尾。

–阅读次数(68)

发表评论

电子邮件地址不会被公开。

*