2012-02-28 9 views
3

小さなAndroid-AppでFlickrに画像をアップロードします。したがって、ユーザーはログインしてアクセス許可を受け入れる必要があります。Flickr認証の署名を作成する(Android SDK)

私の問題は、署名を作成するパラメータが何であるかわかりません。 これは、FlickrのWebサイトに書かれている:

The base string is constructed by concatenating the HTTP verb, the request URL, and all request parameters sorted by name, using lexicograhpical byte value ordering, separated by an '&'.

「リクエストパラメータ」とは何ですか? 私はさまざまなパラメータで何度も試してみましたが、常に「Apiのキーまたは署名が無効です」というエラーが表示されます。

ありがとうございました!

答えて

6

HTTP動詞で始める必要があります。あなたはGETリクエストをしていると言います。署名ベース文字列の第1部は、次のとおりです。

GET

は、その後、あなたがURL http://www.example.com/api/?filename=hello.jpgを呼び出していると言うことができます。パラメータを無視して、あなたはパート2を持っている:

http://www.example.com/api/

その後、あなたはfilenameは上記URLからのもので、次のパラメータを、持って言うことができます。サーバによって要求が許可されるためには、プリフィックスとしてoauth_が必要です。

  • oauth_consumer_key = 9djdj82h48djs9d2、
  • oauth_token = kkk9d7dh3k39sjv7、
  • oauth_signature_method = HMAC-SHA1
  • oauth_timestamp = 137131201
  • oauth_nonce = 7d8f3e4a
  • 名= hello.jpg

上記のすべてのパラメータは、lexiでソートする必要があります(基本的にアルファベット順に)「&」で区切られた表記上のバイト値の順序です。今、あなたは第三部の一部を持っています:これは

GET&http%3A%2F%2Fwww.example.com%2Fapi%2F&filename%3Dhello.jpg%26oauth_consumer_key%3D9djdj82h48djs9d2%26%0Aoauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D%0A137131201%26oauth_token%3Dkkk9d7dh3k39sjv7

filename=hello.jpg&oauth_consumer_key=9djdj82h48djs9d2& oauth_nonce=7d8f3e4a&oauth_signature_method=HMAC-SHA1&oauth_timestamp= 137131201&oauth_token=kkk9d7dh3k39sjv7

今、あなたは、パート2、パート3は、その後で、その結果、三つの部分を連結URLエンコードする必要がありベースストリングこれで、HMAC-SHA1アルゴリズムを使用して署名する必要があります。その結果得られる署名も要求とともに送信する必要があります。

+0

うわー、素晴らしい!そんなにありがとう。しかし、oauth_nonceは何ですか?どこでタイムスタンプを取得しましたか? – foonot

+1

Nonceはランダムな文字列で、すべてのリクエストに固有のもので、自分で生成する必要があります。それは "一度だけ使われた"という意味ですが、文字や数字の任意の組み合わせが可能です。タイムスタンプは、現在のGMT時間であり、unixタイムスタンプで表されます。これらの両方のパラメータは、個々の要求を悪意のある方法で "再生"することはできません。すべてのリクエストは新しいノンスとタイムスタンプで署名されなければなりません。 –

+0

request_tokenを取得した後、私は次の問題に遭遇しました。アクセストークンの要求トークンを交換するにはoauth_verifierが必要です。 Flickrのページには、この呼び出しを使用する必要があることが記載されています。「http://www.flickr.com/services/oauth/authorize?oauth_token = 72157626737672178-022bbd2f4c2f3432」と、戻り値にはこのベリファイアが含まれている必要があります。しかし、Javaのlibは2つのトークンを取得するためのメソッドしか提供していませんが、私は検証されたURLをどのように呼び出して検証者を取得するのかは不明です。 – foonot

関連する問題