2011-07-20 9 views
7

OAuthを使用してサイトからアクセストークンとシークレットを取得しようとしています。リクエストトークンとリクエストシークレットの交換はうまくいきますが、アクセストークンを取得する時間が来たら、私はエラーを受け取ります"Invalid signature. Expected signature base string."OAuth 1.0の "無効な署名、期待される署名ベース文字列"の解決方法

誰もこのエラーを見たことがありますか?ここで私は戻って取得していますデータである(それを-ing urldecode後):

Invalid signature. Expected signature base string: POST 
https://www.readability.com/api/rest/v1/oauth/access_token 
oauth_consumer_key=my_consumer_key 
oauth_nonce=d9aff6a0011a633253c5ff9613c6833d79d52cbe 
oauth_signature_method=HMAC-SHA1 
oauth_timestamp=1311186899 
oauth_token=C8GF7D6ytPzQKdZVpy 
oauth_verifier=ncUV4tJSrS 
oauth_version=1.0 
signature=7jUuk6fsEL8XNYxVWcsfGXEreK0%3D 
+5

あなたがこの問題を解決しましたか?私はちょうど同じ問題に遭遇し、答えのどれも私を助けませんでした... – Alfo

答えて

2

は、あなたが見hereを取ることができ、それが一週間ほど前に頼まれました。レスポンス:

OAuthの署名を正確に取得することは、常に大きな苦痛です。あなたのライブラリが生成する基本文字列が、サーバーが期待しているものとまったく同じであることを確認するために頑張ってください。それが本当であれば、間違ったキーでhmacするだけです。

+3

ええ、私はそれを見ましたが、それはかなり曖昧でした。サーバーが期待していることを確認する方法はありますか?私はOAuth仕様に基づいて必要なコンポーネントをすべて持っているようです。http://wiki.oauth.net/w/page/12238555/Signed-Callback-URLs –

0

私はいくつかの理由で回答にコメントすることはできませんが、上記の答えのコメントであなたの質問に答えるためには、Googleが見えるようにあなたのベース文字列を望んでいるかを見るためのOAuth遊び場を使用することができます。 http://googlecodesamples.com/oauth_playground/index.php

+0

あなたの投稿にコメントを投稿できます。 [他の投稿にコメントを投稿するには少なくとも50の担当者が必要です](http://stackoverflow.com/privileges/comment)。 –

-1

最近私はgoogleを検索した後にaouth 1.0の問題に直面していましたが、oauthの署名を生成した人が作成したWebサービスが見つかりました。それは私のために働いた。リンクはhereです。見て:)

+5

ブログがオンラインになっていない場合はどうなりますか?その後、答えはもはや利用できなくなるでしょう。あなたはあなたの答えに実際の答えを含めるべきです、それへのリンクはありません。 – Manuel

+0

ブログがダウンしています –

0

私はこれは本当に古いですけど、これは少しも助けないかもしれませんが、私は今日何かでこれを持って、そして私のためにそれを固定rawurlencode()代わりのurlencode()を行います。

1

@genesisについて説明したように、シグネチャキーを正しく取得するのはかなり面倒ですが、このリンクにはドキュメントhttp://oauth.net/core/1.0/#encoding_parametersがあります。

あなたはHMAC-SHA1を操作するとき親指のルールがあり、

  1. "メソッド(POST/GETの/ etc)" & "エンコードされた文字列-について - あなたのターゲット" として署名ベース文字列を生成します& "HMAC-SHA1署名方式は、HMACとして2つの秘密のクライアントシークレットとトークンシークレットを使用します(クライアント鍵、ノンス、署名方式、タイムスタンプ、トークン、バージョン)
  2. HMAC- -SHA1アルゴリズム鍵:鍵を構成するために、各秘密はUTF8エンコードされ、URLエンコードされ、 '&'文字をセパレータとして使用して単一の文字列に連結されます。 ither秘密は空です。
  3. 署名ベース文字列をHMAC-SHA1テキストとし、連結シークレットをキーとしてクライアントが署名を生成します。 HMAC-SHA1アルゴリズムは結果としてオクテット文字列を生成します。オクテット文字列は、 '='パディング付きでbase64エンコードされている必要があります
  4. 'oauth_signature'パラメータを使用して計算された署名が要求に追加されます。サーバーによって署名が検証されると、このパラメータはクライアントによって署名された署名ベース文字列の一部ではないため、署名ワークフローには含まれません。署名がHTTPリクエストに含まれている場合は、パラメータを送信するために使用された方法で必要に応じて適切にエンコードする必要があります。

出典:http://nouncer.com/oauth/authentication.html