我的xauth实现遇到了一个非常奇怪的错误。
当密码包含"#“时,它将失败。我窥探出了原始的标题,它看起来与另一个应用程序几乎完全一样,除了一个不同的现在(这有关系吗?)
我使用的代码如下:http://pastie.org/2436098
--------MY LIBRARY :FAIL--------
POST /oauth/access_token HTTP/1.1
Host: api.twitter.com
User-Agent: onethingaday/1.0 CFNetwork/485.13.8 Darwin/10.7.0
Authorization: OAuth oauth_nonce="70943970", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1314400256", oauth_consumer_key="fmYDyQZ1IRz6sYuhOAQbJQ", oauth_signature="1VYDQYL5WvkbovQggNUjuY9t%2Fvc%3D", oauth_version="1.0"
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
Connection: keep-alive
Proxy-Connection: keep-alive
x_auth_mode=client_auth&x_auth_username=kkklllkkk1&x_auth_password=kkkk%23kkkk
--------SNOOPING ANOTHER APP : SUCCESS--------
POST /oauth/access_token HTTP/1.1
Host: api.twitter.com
User-Agent: XAuthTwitterEngineDemo/1.0 CFNetwork/485.13.8 Darwin/10.7.0
Content-Length: 78
Content-Type: application/x-www-form-urlencoded
Authorization: OAuth realm="", oauth_consumer_key="fmYDyQZ1IRz6sYuhOAQbJQ", oauth_signature_method="HMAC-SHA1", oauth_signature="mEyjwksg1NoaY2VMQBf70ZN3OhM%3D", oauth_timestamp="1314400386", oauth_nonce="4DF9C426-08F8-49FC-9E1B-576FDBDA8836", oauth_version="1.0"
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive
Proxy-Connection: keep-alive
x_auth_mode=client_auth&x_auth_username=kkklllkkk1&x_auth_password=kkkk%23kkkk发布于 2011-08-27 22:09:01
很可能是您弄坏了签名基字符串。构建参数的方式是试图快捷和更改一些步骤,而且它似乎缺少一个编码级别。您正在构建一个元素的参数列表,如:
E(k) + E('=') + E(v)然后根据组合的、编码的键值对字符串对它们进行排序,然后将所有的字符串组合起来,如
P_{i} + E('&') + P_{i + 1}这将忽略对对的编码级别,因为对于与参数对应的签名基字符串部分,您应该得到的结果实际上是(为了简单起见,假设两个键值对):
E(E(k) + '=' + E(v) + '&' + E(k2) + '=' + E(v2))
=
E(E(k)) + E('=') + E(E(v)) + E('&') + E(E(k2)) + E('=') + E(E(v2))这意味着,键和值的百分比转义字符中的%符号本身也是转义的,所以#变成了第一个%23,然后变成了%2523,因为E('%') = '%25'。
如果你一步一步地遵循标准,你应该做得很好。如果你偏离了标准而没有对等的证据,你很可能会误入歧途。
https://stackoverflow.com/questions/7211416
复制相似问题