饭否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. Blob CLOB区别

    区别: CLOB :使用char来保存数据.例如xml文件.文章或者较长的文字. BLOB:就是使用二进制保存数据.例如保存位图.图片音乐. 联系:两者可以互相转换.或者直接用lob字段代替两者. 读 ...

  2. 绝对强大的三个linux指令: ar, nm, objdump

    前言如果普通编程不需要了解这些东西,如果想精确控制你的对象文件的格式或者你想查看一下文件对象里的内容以便作出某种判断,刚你可以看一下下面的工具:objdump, nm, ar.当然,本文不可能非常详细 ...

  3. Find the location of libmysqlclient.so.X file in Linux environments

    I'm putting together a script that has a requirement of knowing libmysqlclient.so.[15|16|18] .so fil ...

  4. centos6 搭建nginx实现负载均衡

    一.安装nginx 1)准备2台服务器,环境一样,同时执行 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.r ...

  5. Django的学习(六)————templates过滤器、Django shell、admin

    一.filter: 1.介绍: 写在模板中,属于Django的模板语言. 可以修改模板中的变量,从而显示不同的内容 2.使用: {{ value | filter }},且过滤器可以嵌套使用 < ...

  6. ssh设置无密码登录

    设置无密码登录此处设为有主机a登录到主机b 1.在主机a生成公钥 ssh-keygen -t rsa  之后有导航(其实一直回车就可以) 2.此时在主机a/home/YOURHOSTNAME/.ssh ...

  7. 2018.10.31 NOIP训练 锻造(方程式期望入门题)(期望dp)

    传送门 根据题目列出方程: fi=pi∗(fi−1+fi−2)+(1−pi)∗(fi+1+fi)f_i=p_i*(f_{i-1}+f_{i-2})+(1-p_i)*(f_{i+1}+f_i)fi​=p ...

  8. 2018.10.26 NOIP模拟 图(最小生成树+线段树合并)

    传送门 首先最开始说的那个一条路径的权值就是想告诉你两个点之间的贡献就是瓶颈边的权值. 那么肯定要用最小生成树算法. 于是我考场上想了30min+30min+30min+的树形dpdpdp 发现转移是 ...

  9. Vue + Element UI 实现权限管理系统

    Vue + Element UI 实现权限管理系统 前端篇(一):搭建开发环境 https://www.cnblogs.com/xifengxiaoma/p/9533018.html

  10. Day1-python基础-变量常量

    不积跬步无以至千里 补充上一节字符串的内容: 字符串格式化输出: name = input("name>>") print("My name is %s&qu ...