android - Postman Rest Client 如何创建 Oauth 签名?无法在 android 中解析 Oauth_Signature

标签 android encryption oauth

我正在尝试访问 1.0 版本的 Oauth 网络服务。 我可以通过 postman 客户端成功完成这项工作,但无法在 安卓应用。

使用的库:- 路标-commonshttp4-1.2.1.2.jar

API 所需的参数:- oauth_consumer_key oauth_nonce oauth_version oauth_signature oauth_signature_method oauth_timestamp

代码:-

HttpClient httpclient = new DefaultHttpClient();


            // generate the oauth_signature
            String urlParamsForSignature = "oauth_consumer_key="+consumerKey + 
                    "&oauth_nonce=" + "pT6c0H"+
                    "&oauth_signature_method=HMAC-SHA1" +
                    "&oauth_timestamp=" + timestamp +
                    "&oauth_version=1.0";
            String baseString = "https://oauth.withings.com/account/request_token?" + urlParamsForSignature;
            String signature = computeHmac(URLEncoder.encode(baseString), consumerSecret);
            // add it to params list
            qparams.add(new BasicNameValuePair("oauth_signature", signature));

            // generate URI which lead to access_token and token_secret.
            String urlParams = "oauth_consumer_key="+consumerKey + 
                        "&oauth_nonce=" + "pT6c0H"+
                        "&oauth_signature=" + signature +
                        "&oauth_signature_method=HMAC-SHA1" +
                        "&oauth_timestamp=" + timestamp +
                        "&oauth_version=1.0";

            String url = "https://oauth.withings.com/account/request_token?" + urlParams;

            HttpGet httpget = new HttpGet(url);
            // output the response content.
            System.out.println("oken and Token Secrect:");

            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                InputStream instream = entity.getContent();
                int len;
                byte[] tmp = new byte[2048];
                while ((len = instream.read(tmp)) != -1) {
                    System.out.println(new String(tmp, 0, len, ENC));
                }
            }



public String computeHmac(String baseString, String key)
{
    try {
        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));
    } catch (InvalidKeyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
}

最佳答案

根据您发布的代码..您没有使用路标库来生成签名。您正在为此使用您的自定义代码。

您可以按如下方式使用路标库:

//create an oAuth consumer and provide CONSUMER_KEY & CONSUMER SECRET.
DefaultOAuthConsumer defaultOAuthConsumer  = new DefaultOAuthConsumer("CONSUMER_KEY","CONSUMER_SECRET");

   //REQUEST URL
    String url = "https://oauth.withings.com/account/request_token";
    try {
        // sign the url with consumer. (This will add all oAuth parameters to the query automatically and return the signed request url with all parameter). 
        url = defaultOAuthConsumer.sign(url);
    } catch (OAuthMessageSignerException e) {
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        e.printStackTrace();
    }

// use the url to make your request.

关于android - Postman Rest Client 如何创建 Oauth 签名?无法在 android 中解析 Oauth_Signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760525/

相关文章:

android - 类android支持v4打印助手已经添加到输出中

security - 是否值得对数据库中的电子邮件地址进行加密?

php - 如何加密字符串数据,使其只能由其所在的计算机解码?

laravel - Nuxt Auth +名流手动登录

oauth - facebook "Valid OAuth Redirect URIs"中不允许重定向 URI

c# - 将 OAuth token 从 Google API 响应保存到数据库?

android - Android Studio 测试中的颜色含义

java - 如何避免通过 Android DownloadManager 下载损坏?

android - Xamarin.Android DialogFragment一些LifeCycle事件未触发

java - 如何检查字符串是否加密?