Android OAuth生成签名

Android OAuth生成签名,android,hash,oauth,signature,Android,Hash,Oauth,Signature,我正在尝试为OAuth请求生成签名。我是这样做的: String toHash = URLEncoder.encode("POST&https://" + url + "&oauth_callback=oob&oauth_consumer_key=" + key + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + timeStamp + "&oauth_nonce=" + timeSta

我正在尝试为OAuth请求生成签名。我是这样做的:

String toHash = URLEncoder.encode("POST&https://" + url + "&oauth_callback=oob&oauth_consumer_key=" + key + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + timeStamp + "&oauth_nonce=" + timeStamp);

String hash = computeHmac(toHash, secret);

public String computeHmac(String baseString, String key)
    {
        Mac mac = Mac.getInstance("HmacSHA1");
        SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
        mac.init(secret);
        byte[] digest = mac.doFinal(baseString.getBytes());
        return new String(Base64.encodeBase64(digest));
    }

但是服务器告诉我签名是错误的。我做错了什么?Pease help…

根据OAuth规范:

签名基字符串是通过连接在一起构造的, 依次为以下HTTP请求元素:

  • HTTP请求方法是大写的。例如:“头”, “GET”、“POST”等。如果请求使用自定义HTTP方法,则 必须进行编码(第3.6节)

  • 一个“&”字符(ASCII码38)

  • 编码后的第3.4.1.2节中的基本字符串URI (第3.6节)

  • 一个“&”字符(ASCII码38)

  • 第3.4.1.3.2节中规范化的请求参数 正在编码(第3.6节)

  • 在基本字符串中,某些字符没有正确编码和规范化。例如:

    https://             ->   https%3A%2F%2F
    oauth_callback=oob   ->   oauth_callback%3Doob
    ...
    

    有关字符串构造的所有详细信息都在这里:

    感谢您的帮助。internetz上的组合指令对于什么被规范化,什么被编码,以及以什么顺序,仍然不清楚。例如;为什么有些“&”字符是编码的而有些不是。。。哦,我会向你吐出我最后的一口气。。。