1

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

4

1 に答える 1

2

ほとんどの場合、署名の基本文字列をぶち壊しました。パラメータを作成する方法は、いくつかの手順を短縮して変更しようとしていますが、エンコーディングレベルが不足しているようです。次のような要素のパラメータリストを作成しています。

E(k) + E('=') + E(v)

次に、エンコードされたキーと値のペアの文字列を組み合わせて並べ替え、次のようなすべての文字列を組み合わせます。

P_{i} + E('&') + P_{i + 1}

これは、ペアのエンコーディングレベルを見逃します。これは、パラメータに対応する署名ベース文字列の部分で最終的に得られるものが実際には次のとおりであるためです(簡単にするために2つのキーと値のペアを想定)。

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になり、次にになります。%2523E('%') = '%25'

標準のステップバイステップに従う場合は、問題なく実行する必要があります。同等性の証明なしに標準から逸脱すると、道に迷う可能性があります。

于 2011-08-27T22:09:01.830 に答える