关于Oauth1.0认证及认证后调用API的方法
来源:互联网 发布:淘宝阿丑体育 编辑:程序博客网 时间:2024/06/06 01:35
假设已经拿到以下 consumer_key:
{ 'consumer_key': '79a7578ce6cf4a6fa27dbf30c6324df4', 'consumer_secret': 'c7ed87c12e784e48983e3bcdc6889dad'}
并且拿到用户的授权,得到以下 oauth_token:
{ 'oauth_token':'fa361a4a1dfc4a739869020e586582f9', 'oauth_token_secret':'0183ce137e4d4170b2ac19d3a9fda677'}
假设服务器地址为 openapi.kuaipan.cn,现在需要向 http://openapi.kuaipan.cn/1/fileops/create_folder 用GET方法发出请求,请求参数 (parameters) 如下:
{ 'oauth_version': '1.0', 'oauth_token': 'fa361a4a1dfc4a739869020e586582f9', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_nonce': '58456623', 'oauth_timestamp': 1328881571, 'oauth_consumer_key': '79a7578ce6cf4a6fa27dbf30c6324df4', 'path': '/test@kingsoft.com', 'root': 'kuaipan'}
首先计算字符基串 (base string),参考算法(伪代码)可以为:
http_method + "&" +url_encode( base_uri ) + "&" +url_encode( “&”.join( sort( [url_encode ( k ) + "=" +url_encode ( v ) for k, v in paramesters.items() ] ))
注意点:
- http_method只能为大写,本例子中是GET;
- base_uri是不包括 "?" 号和其右边的query参数的uri,本例中是http://openapi.kuaipan.cn/1/fileops/create_folder ,传输协议,主机地址必须用小写,请不要包含端口号,请求路径也是大小写区分;
- 参数(parameters)按照其参数名的字典序排序,本例子的顺序是[oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, path, root];
- urlencode编码的字符需要用utf8转编码,16进制部分需要大写,如等号”=”是%3D而不是%3d;
- urlencode规则:只有字母数字和[.-_~](红色部分,不包括方括号)不用encode,其他字符都需要,例如urlencode(".-_~+*")=".-_~%20%2B%2A"
这样我们根据算法生成字符基串如下(注意蓝色部分是%2540而不是%40):
GET&http%3A%2F%2Fopenapi.kuaipan.cn%2F1%2Ffileops%2Fcreate_folder&oauth_consumer_key%3D79a7578ce6cf4a6fa27dbf30c6324df4%26oauth_nonce%3D58456623%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1328881571%26oauth_token%3Dfa361a4a1dfc4a739869020e586582f9%26oauth_version%3D1.0%26path%3D%252Ftest%2540kingsoft.com%26root%3Dkuaipan
然后生成签名加密的密钥(记得有个&),注意假如没有oauth_token的话,蓝色部分是不用包含的:
c7ed87c12e784e48983e3bcdc6889dad&0183ce137e4d4170b2ac19d3a9fda677
假如没有oauth_token的话,密钥为 c7ed87c12e784e48983e3bcdc6889dad&,在本例子中,有oauth_token。
使用密钥通过HMAC-SHA1算法签名字符基串,生成签名(先生成数字签名,然后再用base64 encode):
pa7Fuh9GQnsPc+Lcn+Qu6G7LVEU=
最后把urlencode后的签名作为oauth_signature的值,向连接发出请求:
curl –k "http://openapi.kuaipan.cn/1/fileops/create_folder?oauth_version=1.0&oauth_signature=pa7Fuh9GQnsPc%2BLcn%2BQu6G7LVEU%3D&oauth_token=fa361a4a1dfc4a739869020e586582f9&oauth_signature_method=HMAC-SHA1&oauth_nonce=58456623&oauth_timestamp=1328881571&path=%2Ftest%40kingsoft.com&oauth_consumer_key=79a7578ce6cf4a6fa27dbf30c6324df4&root=kuaipan"
0 0
- 关于Oauth1.0认证及认证后调用API的方法
- QQ OAuth1.0认证中Url的调用及参数的传递讲解[OAuth开发]
- Twitter OAuth1.0认证过程
- Oauth1.0与2.0的认证流程笔记
- WebView作为嵌入浏览器进行OAuth1.0认证
- IBM关于XML的认证及教程
- MongoDB3.0后的数据库安全认证
- 关于微博服务端API的OAuth认证实现
- 关于微博服务端API的OAuth认证实现
- 关于微博服务端API的OAuth认证实现
- JAVA调用HTTPS双向认证API
- MongoDB认证&Java API接口调用
- JAVA调用HTTPS双向认证API
- 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
- ESB v6.6 关于“应用系统中增加账号及密码配置后,对应服务调用时允许进行账号及密码认证功能”
- Oauth2.0认证应用 API
- HTTP认证方式及restful架构下的一种认证方法
- 思科认证考试关于CCNA考试的步骤及准备
- Android内存分析之MAT
- 莱特币开发教程
- 【VS开发】VS2010中导入ActiveX控件
- C语言位操作
- 【VS开发】使用VS2010创建MFC ActiveX工程项目
- 关于Oauth1.0认证及认证后调用API的方法
- 虚拟货币开发
- Java目录
- BJTU 1729 Ryan的弹幕游戏(BFS)
- sql执行顺序
- win10连上wifi却上不了网
- 虚拟币开发
- LeetCode 327. Count of Range Sum(区间和计数)
- 虚幻4 材质的编译。