首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当密码包含"#“时,XAuth失败

当密码包含"#“时,XAuth失败
EN

Stack Overflow用户
提问于 2011-08-26 23:19:41
回答 1查看 216关注 0票数 1

我的xauth实现遇到了一个非常奇怪的错误。

当密码包含"#“时,它将失败。我窥探出了原始的标题,它看起来与另一个应用程序几乎完全一样,除了一个不同的现在(这有关系吗?)

我使用的代码如下:http://pastie.org/2436098

代码语言:javascript
复制
--------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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-27 22:09:01

很可能是您弄坏了签名基字符串。构建参数的方式是试图快捷和更改一些步骤,而且它似乎缺少一个编码级别。您正在构建一个元素的参数列表,如:

代码语言:javascript
复制
E(k) + E('=') + E(v)

然后根据组合的、编码的键值对字符串对它们进行排序,然后将所有的字符串组合起来,如

代码语言:javascript
复制
P_{i} + E('&') + P_{i + 1}

这将忽略对对的编码级别,因为对于与参数对应的签名基字符串部分,您应该得到的结果实际上是(为了简单起见,假设两个键值对):

代码语言:javascript
复制
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'

如果你一步一步地遵循标准,你应该做得很好。如果你偏离了标准而没有对等的证据,你很可能会误入歧途。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7211416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档