Mryqu's Notes


  • 首页

  • 搜索
close

twitcurl生成HTTP OAuth头的实现流程

时间: 2015-12-27   |   分类: DataBuilder   C++     |   阅读: 106 字 ~1分钟

对twitcurl代码做了一些修改,结果遇到了认证失败的错误:

{“errors”:[{“message”:”Could not authenticate you”,”code”:32}]}

通过继续修改twitcurl代码改正问题,学习了twitcurl的认证授权部分代码。其授权部分主要在oauthlib.h和oauthlib.cpp中的oAuth类实现中。下面主要分析一下oAuth::getOAuthHeader方法。

外部数据

Http URL: https://api.twitter.com/1.1/search/tweets.json Http头参数:

|参数键|参数值 |—– |q|va |count|23 |result_type|recent

Http授权参数:

|参数键|参数值 |—– |oauth_consumer_key|xvz1evFS4wEEPTGEFPHBog |oauth_signature_method|HMAC-SHA1 |oauth_token|370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |oauth_version|1.0

oAuth::getOAuthHeader方法

  • 通过buildOAuthHttpParameterKeyValPairs(params, true,rawKeyValuePairs);对Http头参数中参数值进行百分号编码(URL编码),编码后结果放在哈希表rawKeyValuePairs中 rawKeyValuePairs:
    键值
    qva
    count23
    result_typerecent
  • 假定HTTP内容是经过百分号编码的,通过buildOAuthRawDataKeyValPairs( rawData,false, rawKeyValuePairs );找到内容中的键值对,放入哈希表rawKeyValuePairs中 rawKeyValuePairs:
    键值
    qva
    count23
    result_typerecent
  • 通过buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin,std::string( "" ), rawKeyValuePairs, true );创建认授权证: rawKeyValuePairs:
    键值说明
    qva
    count23
    result_typerecent
    oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
    oauth_nonce131862295819ctwitcurl实现就是时戳项加一个随机数
    oauth_signature_methodHMAC-SHA1固定值
    oauth_timestamp1318622958
    oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
    oauth_version1.0固定值
  • 通过getSignature( eType, pureUrl, rawKeyValuePairs,oauthSignature );获得签名
    • 生成 sigBase:twitcurl生成HTTP OAuth头的实现流程
    • 使用consumer_secret和token_secret组成signing_key,使用HMAC_SHA1算法通过sigBase和signing_key生成摘要strDigest:B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6(非真实计算而得数据)
    • 通过base64_encode进行编码:tnnArxj06cWHq44gCs1OSKk/jLY= (非真实计算而得数据)
    • 通过百分比编码获得最终签名:twitcurl生成HTTP OAuth头的实现流程 (非真实计算而得数据)
  • 通过rawKeyValuePairs.clear();清除OAuth不需要的键值对
  • 通过buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, oauthSignature, rawKeyValuePairs, false );重新创建认授权证: rawKeyValuePairs:
    键值说明
    oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
    oauth_nonce131862295819ctwitcurl实现就是时戳项加一个随机数
    oauth_signature_methodHMAC-SHA1固定值
    oauth_timestamp1318622958
    oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
    oauth_version1.0固定值
    oauth_signature
  • 最终生成HTTP授权头:twitcurl生成HTTP OAuth头的实现流程

参考

Twitter OAuth Overview
Twitter sign in implementation
Creating a signature
Authorizing a Twitter request
Percent encoding parameters for Twitter
Github: mryqu/twitcurl

标题:twitcurl生成HTTP OAuth头的实现流程
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#twitter# #twitcurl# #authorization# #oauth# #signaure#
[C++]玩玩Designated Initializer
表情符号之Unicode和UTF-8编码
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
    • 外部数据
    • oAuth::getOAuthHeader方法
    • 参考
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%