【问题标题】:Android Flickr Oauth invalid_signature while getting the request token获取请求令牌时的Android Flickr Oauth invalid_signature
【发布时间】:2012-06-14 09:28:35
【问题描述】:

我正在尝试在 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

Nonce 是 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

我生成签名的方式有问题还是这里有任何其他问题。 编辑:basestring中timestamp的值和请求是一样的

【问题讨论】:

    标签: android oauth flickr


    【解决方案1】:

    Flickr 文档说签名过程应该是这样的:

    所有使用身份验证令牌的 API 调用都必须经过签名。在
    此外,调用 flickr.auth.* 方法和重定向到
    flickr 上的身份验证页面也必须签名。

    签名过程如下。

    • 根据参数名称将参数列表按字母顺序排序。
      例如
      foo=1, bar=2, baz=3 排序为 bar=2, baz=3, foo=1

    • 连接共享密钥和参数名称-值对
      例如
      SECRETbar2baz3foo1

    • 计算这个字符串的 md5() 哈希

    • 将此值附加到名称为 api_sig 的参数列表中,以十六进制字符串形式
      例如
      api_sig=1f3870be274f6c49b3e31a0c6728957f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 2011-09-28
      • 2012-06-22
      相关资源
      最近更新 更多