2

Androidでflickrアプリを作成しようとしていますが、リクエストトークンをリクエストするための認証でスタックしています。

署名の生成

API キー:-496a8ac6ca46325e6cef* * ****

API シークレット:-685682a92* **

ベース文字列:- GET&http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Frequest_token&oauth_callback%3Dsoft%253A%252F%252Fcom.alice.testflickr%26oauth_consumer_key%3D496a8ac6ca46325e6cef%26oauth_nonce%3D394e61453f7b82cd633d229ac9b6454b%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1339654651%26oauth_version%3D1.0

署名を生成する方法:-

     public String computeSignature(String baseString,String key)throws IllegalStateException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException{
            //here key is the appsecret+"&"
            byte[] byteHMAC = null;
     Mac mac = Mac.getInstance("HmacSHA1");
     SecretKeySpec spec = new SecretKeySpec(key.getBytes(),"HmacSHA1");
     mac.init(spec);
     byteHMAC = mac.doFinal(baseString.getBytes("UTF-8"));

     return new String(Base64.encode(byteHMAC,Base64.NO_WRAP));
}

タイムスタンプは(System.currentTimeMillis)/1000

ノンスはLong.toString(System.nanoTime());

次のようなリクエスト トークンをリクエストします。

http://www.flickr.com/services/oauth/request_token?oauth_nonce=12190496931948&oauth_timestamp=1339664498&oauth_consumer_key=496a8ac6ca46325e6cef&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_signature=jg8CCdKb8gw%2BMJK0aJ6Brpba0G0%3D&oauth_callback=soft%3A%2F%2Fcom.alice.testflickr

しかし、私はいつも得てしまいます

oauth_problem=signature_invalid&debug_sbs=GET&http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Frequest_token&oauth_callback%3Dsoft%253A%252F%252Fcom.alice.testflickr%26oauth_consumer_key%3D496a8ac6ca46325e6cef%26oauth_nonce%3D12190496931948%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1339664498%26oauth_version%3D1.0

署名を生成する方法に何か問題がありますか、それとも他の問題がありますか。EDIT:ベースストリングとリクエストのタイムスタンプの値が同じです

4

1 に答える 1

0

Flickr のドキュメントによると、署名プロセスは次のようになります。

認証トークンを使用するすべての API 呼び出しは署名する必要があります。さらに
、flickr.auth.* メソッドの呼び出しと
flickr の認証ページへのリダイレクトも署名する必要があります。

署名の手順は次のとおりです。

  • パラメーター名に基づいて、引数リストをアルファベット順に並べ替えます。
    例:
    foo=1, bar=2, baz=3 は bar=2, baz=3, foo=1 にソートされます

  • 共有シークレットと引数の名前と値のペアを連結します。
    例:
    SECRETbar2baz3foo1

  • この文字列の md5() ハッシュを計算します

  • この値を引数リストに api_sig という名前で、16 進数の文字列形式で追加し ます

于 2012-06-22T10:24:54.140 に答える