C++ 如何正确创建oauth签名基字符串?
我想实现OAuth 1.0协议,以便使用。但是当我在C++中实现了OAuthTebug,以获取请求令牌并发送请求复制它的返回时,签名无效,我无法确定签名中的错误。以下是我的程序生成的所有参数:C++ 如何正确创建oauth签名基字符串?,c++,oauth,libcurl,C++,Oauth,Libcurl,我想实现OAuth 1.0协议,以便使用。但是当我在C++中实现了OAuthTebug,以获取请求令牌并发送请求复制它的返回时,签名无效,我无法确定签名中的错误。以下是我的程序生成的所有参数: oauth_nonce=xoviybpokqnxdwlnkeoorawfijgezr oauth_timestamp=1381745375 oauth_callback=http%3A%2F%2Fcopy-oauth.local%2Fget_access_token.php oauth_signatur
oauth_nonce=xoviybpokqnxdwlnkeoorawfijgezr
oauth_timestamp=1381745375
oauth_callback=http%3A%2F%2Fcopy-oauth.local%2Fget_access_token.php
oauth_signature_method=HMAC-SHA1
这是我用来生成令牌的基本字符串:
获取https%3A%2F%2Fapi.copy.com%2fauth%2Frequest&oauth\u consumer\u密钥%3D[my
32个符号
密钥]%26oauth\u当前%3dxoviybopokqnxdwlnkeoorawfijgezr%26oauth\u签名\u方法%3DHMAC-SHA1%26oauth\u时间戳%3D1381745375%26oauth\u时间戳%3D
它是生成签名的关键:
[我的消费者秘密,48个符号]&
这是我在base64和百分比编码后收到的签名:
LNAOAWYGTKJWJ%2BVLKTVGYL0%3D
最后一件事是将所有参数发送到服务器。为此,我使用libcurl:
char * abc="https://api.copy.com/oauth/request/?oauth_callback=http%3A%2F%2Fcopy-oauth.local%2Fget_access_token.php&oauth_consumer_key=[my 32 symbols key]&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1381745375&oauth_nonce=xoviybpokqnxdwlnkeoorawfijgezr&oauth_signature=lNaaOaWyGtkJWj%2BVLjLlKTVGYL0%3D";
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_easy_setopt(curl, CURLOPT_CAINFO, "C:\\a\\a\\a\\cacert.pem");
curl_easy_setopt(curl, CURLOPT_URL, abc);
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
curl_global_cleanup();
然后我的控制台将输出:
oauth_错误_消息=oauth_问题%3Dsignature_无效%26debug_sbs
我的实现出了什么问题?以下是一些立即浮现在我脑海中的事情:
char * abc="https://api.copy.com/oauth/request?oauth_callback= ...
主要问题是oauth_回调应该是
两倍百分比编码的
,以便创建签名基字符串。这是我在请求中发送的字符串:
oauth\u回调=”http://copy-oauth.local/get_access_token.php“
这是我添加到签名基字符串中的字符串:
char * abc="https://api.copy.com/oauth/request?oauth_callback= ...
http%253A%252F%252F复制oauth.local%252Fget\u access\u token.php
1。我尝试了包含oauth_回调,但没有将其添加到基字符串,但没有帮助。2.我还尝试了使用和不使用该参数。3.Thx,但它的输出是相同的错误4。只是打字错误。这里还有什么错误?您能用Fiddler检查请求并发布实际发送的内容吗?该请求表明oauth参数是在授权头中发送的,而不是在querystring中发送的。虽然这还可以,但上面的代码似乎表明了相反的情况。我假设您已经更改了代码,那么只需检查一下,在没有查询字符串的情况下,为什么url路径以问号结尾,并且在构建基串时是否考虑到了这一点?是的,我更改了代码,现在发送了授权标头。在我的基本字符串中,我并没有包含问号,但在url路径中却包含问号。但当我取下它时,什么也没发生。如果有帮助的话,我可以提供我的签名基本字符串。您可能希望使用Oauth测试控制台检查您的基本字符串和签名