饭否Oauth授权
 
首先去饭否申请一个应用,创建新应用即可,等待审核。审核通过了之后会拿到consumer_key和consumer_secret。这两个值先记录在代码里。后面经常用到。
然后第一步是用consumer_key,去换取request_token和request_token_secret。
其中有两个东西需要我们生成的,一个是时间戳timestamp,一个是随机字符串nonce
百度就可以找到生成方式。
值得注意的是时间戳需要截取前十位,也就是到秒为止。随机字符串就随便用用随机数即可。
 
这里需要重点注意的是签名和转码
获取request_token的方式是发出GET请求到指定的url。后面带的参数就按正常的GET请求的写法,即
url?key1=value1&key2=value2。。。
注意的是其中有一个签名的参数,是把base string按照HMAC-SHA1的方式加密得到的字符串。而base string是按照如下规则拼成的:
本次请求方式(GET或者POST,必须大写)+"&"+本次请求的url进行encode转码之后的结果+"&"+参数列表进行encode转码之后的结果
其中的参数列表就是上面我们要发GET请求的那些参数,也是按照key1=value1&key2=value2格式写的,不过必须按照参数名称进行排序。
第一步的参数值和参数名一般没有符号需要转码,但是中间的&和=转码之后会替换成%3D和%26。
以上内容拼起来之后的base string,按照HMAC-SHA1方式加密之后的结果也要进行转码,因为加密之后的结果的结尾一定会有一个“=”,中间也可能出现/+等符号,也要进行转码再放进get请求的url中。
HMAC-SHA1方式加密算法中需要有一个key,这个key在饭否API文档那边也没告诉我们,第一步需要用我们手里的consumer_secret末尾加一个“&”符号,作为key。
 
第一步到这里基本上就没问题了。
 
请求成功之后会返回一个oauth_token=(一大串字符)&oauth_token_secret=(一大串字符)
如果请求失败了会返回报错401,那就要检查一下签名是不是正确了,可能哪里有一点点错,就会401,这里是卡的最久的一步了。
 
第二步:
 
这个时候你要让你的应用打开这个网址:
其中request_token就是上面刚刚得到的token,callback_url,是一个属于你的url,这个url最好具备处理get请求的能力。
这个网址打开其实是一个饭否授权的界面,相信大家都看过的,如果浏览器已经登陆了饭否用户,那么就会只有一个“授权”按钮。用户点了之后,你的应用就得到了这个用户的授权,并且界面会跳转到你的callback_url上,并且在你的url后面加了?request_token=(一大串字符)
这个写法很明显,相当于对你的callback_url发送了get请求,如果你的url有处理get请求的能力,那相当于得到了一个参数,参数名是request_token,参数值你的应用需要用在下一步的请求中。
 
第三步:
 
上面的request_token得到之后,需要再发送一次请求。
跟第一步的基本相同,只是增加了一个oauth_token的参数,就是刚才得到的request_token。别忘了加进参数列表参与签名。
其他参数与第一步相同。
另外这一次的签名时候的key,前半部分不变,还是consumer_secret加一个“&”符号,后面再加上刚才第一步获得到的那个secret。
 
这次请求成功之后,得到的一对token和secret,就是这个用户对这个应用授权的access_token和access_token_secret,以后这个应用就可以使用它们,进行饭否API的调用。

饭否Oauth记录的更多相关文章

  1. swift实现饭否应用客户端源码

    swift 版 iOS 饭否客户端 源码下载:http://code.662p.com/view/13318.html 饭否是中国大陆地区第一家提供微博服务的网站,被称为中国版Twitter.用户可通 ...

  2. C#开源

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  3. C# 开源项目一

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  4. C#开源大全--汇总(转)

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  5. C#开源大全--汇总

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  6. 分享一个难得的YiBo微博客户端应用源码Android版

    今天给大家分享一款,YiBo微博客户端应用源码,这是一款专为Android用户打造的聚合型微博客户端,完美支持新浪微博.腾讯微博.搜狐微博.网易微博和饭否五个微博平台,界面清爽,使用简单轻巧,支持多账 ...

  7. C#开源汇总

    原文:C#开源汇总 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Pho ...

  8. C# 网上收集的一些所谓的开源项目

    C#开源 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7- ...

  9. C#开源项目大全

    C#开源项目大全   商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Ph ...

随机推荐

  1. 2018.12.05 codeforces 961E. Tufurama(主席树)

    传送门 一眼主席树sbsbsb题(%%%树状数组大佬们). 简化题意:求满足x<y,y≤ax,x≤ayx<y,y\le a_x,x\le a_yx<y,y≤ax​,x≤ay​的(x, ...

  2. Win7 VS2015环境编译Libpng

    第3次编译Libpng依然想不起任何东西,为了不浪费第4次的时间... http://libpng.com/pub/png/libpng.html http://www.zlib.net/ 解压两个压 ...

  3. Arbiter

    from  2015-EDCAV-Problems encountered in various arbitration techniques used in NOC router-A survey ...

  4. 图解TCP/IP(一)

    IP(Internet Protocol) IP/ICMP -数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递.而一旦跨越多种数据链路,就需要借助网络层. -配备IP的设备,但是不进行路 ...

  5. 第30章:MongoDB-索引--地理信息索引

    ①地理信息索引 地理信息索引分为两类:2D平面索引,另外就是2DSphere球面索引.在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标. 范例:定义一个商铺的集合 db.sho ...

  6. HDU 1536 S-Nim (组合游戏+SG函数)

    题意:针对Nim博弈,给定上一个集合,然后下面有 m 个询问,每个询问有 x 堆石子 ,问你每次只能从某一个堆中取出 y 个石子,并且这个 y 必须属于给定的集合,问你先手胜还是负. 析:一个很简单的 ...

  7. Redis和RabbitMQ在项目中的使用

    一:Redis的使用 1.先引入pom.xml的依赖 <dependency> <groupId>redis.clients</groupId> <artif ...

  8. jq+download+文件夹下载

    最近公司在做工程项目,实现文件夹下载. 网上找了很久,发现网上的代码都有相似的问题,不过最终还是让我找到了一个符合的项目. 工程: 进行项目文件夹下载功能分析,弄清楚文件夹下载的原理,提供的数据支持. ...

  9. js中的事件代理(委托)

    1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...

  10. 01-Javascript简介

    Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) JavaScript的组成 Java ...