0

我想播放从 Echonest API 获得的 7Digital 剪辑的预览。为此,我想以编程方式为每个请求生成 oauth 签名。

播放剪辑的网址 - http://previews.7digital.com/clip/1234 但它需要 2 条腿的 oAuth。

为此,我使用了从 stackoverflow 获得的以下代码。

private static final String HMAC_SHA1 = "HmacSHA1";

private static final String ENC = "UTF-8";

private String getSignature(String url, String params)
            throws UnsupportedEncodingException, NoSuchAlgorithmException,
            InvalidKeyException {

    StringBuilder base = new StringBuilder();
    base.append("GET&");
    base.append(url);
    base.append("&");
    base.append(params);
    System.out.println("String for oauth_signature generation:" + base);

    byte[] keyBytes = (DIGITAL_CONSUMER_SECRET + "&").getBytes();

    SecretKey key = new SecretKeySpec(keyBytes, HMAC_SHA1);

    Mac mac = Mac.getInstance(HMAC_SHA1);
    mac.init(key);

    return new String(base64.encode(mac.doFinal(base.toString().getBytes(
            ENC))), ENC).trim();
}

但是当我点击播放剪辑的最终网址时,我收到了无效的签名错误。

当我使用 7digital 工具生成 url 时,我可以播放剪辑。http://7digital.github.io/oauth-reference-page/

但是我需要为每个播放请求以编程方式生成最终 url。帮我解决这个问题。

4

2 回答 2

0

7digital android sdk 可以在这里找到并包含文档,以及生成 Oauth 签名的示例https://github.com/7digital/7digital-Android-SDK

于 2014-08-07T10:53:58.563 回答
0

您正在对整个基本字符串进行编码,而是应该分别对基本字符串的三个部分进行编码,“&”字符不得编码。

使用我的 OAuth 参考页面将您生成的内容与参考实现进行比较:https ://bettiolo.github.io/oauth-reference-page/

该规范有更多关于基本字符串生成的信息:http: //oauth.net/core/1.0a/#anchor13

于 2014-08-13T12:52:57.557 回答