2012-05-24 2 views
1
String baseString="POST&"; 
      String subBaseString = "oauth_consumer_key="+oauth_consumer_key+"&oauth_nonce="+nonce+"&oauth_signature_method="+oauth_signature_method; 
      subBaseString += "&oauth_timestamp="+ oauth_timestamp+"&oauth_token="+oauth_token+"&oauth_version=1.0"; 
      baseString+=URLEncoder.encode(baseRequest, "UTF-8"); 
      baseString += "&" + URLEncoder.encode(subBaseString, "UTF-8"); 

      String result; 
      try { 

      SecretKeySpec signingKey = new SecretKeySpec(oauth_consumer_key.getBytes(), oauth_signature_method); 

      Mac mac = Mac.getInstance(oauth_signature_method); 
      mac.init(signingKey); 

      byte[] rawHmac = mac.doFinal(baseString.getBytes()); 

      // base64-encode the hmac 
      result = Base64.encode(rawHmac); 

      } catch (Exception e) { 
      throw new SignatureException("Failed to generate HMAC : " + e.getMessage()); 
      } 

Это мое поколение oauth_signature код ....Drop Box поколение oauth_signature

но получение ошибка ..

{ "Ошибка":. «OAuthError в API v1 + Request неправильно подписали: Invalid или отсутствующая подпись "}

+0

Код выглядит хорошо для меня. Возможно, вы делаете GET или POST с данными, которых нет в подписи? –

+0

Используется PostMethod – behinddwalls

ответ

2

Подписи Oce, nonces и timestamps - все меры безопасности, которые необходимы, если вы используете простой HTTP. Но так как Dropbox API можно использовать по HTTPS, вы можете отказаться от этой сложности, и просто использовать PLAINTEXT signature mode намного проще.

Вот пример кода Java, который выполняет эту работу. (Он помещает информацию OAuth в HTTP-заголовок «Авторизация», но вы можете использовать параметры URL, если хотите.)

/** 
    * @param token 
    * For all "real" API endpoints, pass in the access token here. 
    * For "/oauth/access_token", pass in the request token here. 
    * (For "/oauth/request_token", use {@link #buildInitialOAuthHeader}.) 
    */ 
public static HttpHeader buildOAuthHeader(AppInfo appInfo, Token token) 
{ 
    StringBuilder buf = new StringBuilder(); 
    buf.append("OAuth "); 
    buf.append("oauth_token=\"").append(token.key).append("\""); 
    buf.append(", oauth_consumer_key=\"").append(appInfo.key).append("\""); 
    buf.append(", oauth_signature_method=\"PLAINTEXT\""); 
    buf.append(", oauth_signature=\"").append(appInfo.secret).append("&").append(token.secret).append("\""); 
    return new HttpHeader("Authorization", buf.toString()); 
} 

/** 
    * For "/oauth/request_token". 
    */ 
public static HttpHeader buildInitialOAuthHeader(AppInfo appInfo) 
{ 
    StringBuilder buf = new StringBuilder(); 
    buf.append("OAuth "); 
    buf.append(" oauth_consumer_key=\"").append(appInfo.key).append("\""); 
    buf.append(", oauth_signature_method=\"PLAINTEXT\""); 
    buf.append(", oauth_signature=\"").append(appInfo.secret).append("&\""); 
    return new HttpHeader("Authorization", buf.toString()); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^