2016-12-23 3 views
3

Я пытаюсь добавить OAuth1 авторизацией в моем андроид приложение с помощью залповогоAndroid: Сформировать OAuth1 Подпись в Volley Request

в почтальона, когда я добавить детали как oauth_consumer_key, oauth_consumer_secret, token_key token_secret, как на картинке ниже

Adding Authorization details in Postman

он генерирует заголовок, как показано ниже, и полученный ответ успешно принят.

Postman generated header

Почтальон генерируется заголовок

Authorization:OAuth oauth_consumer_key="4e77abaec9b6fcda9kjgkjgh44c2e1",oauth_token="2da9439r34104293b1gfhse2feaffca9a1",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1482470443",oauth_nonce="cCbH5b",oauth_version="1.0",oauth_signature="A1QPwTATVF4x3cN0%2FN46CZrtSKw%3D" 

Проблема

Я гугл много, чтобы создать OAuth подписи, как postmasn создан, чтобы прикрепить залп ServerConnectionChannel но потерпел неудачу. oauth_signature = "A1QPwTATVF4x3cN0% 2FN46CZrtSKw% 3D"

Текущий код

public void doSendJsonRequest(final ERequest ERequest) { 
requestMethod = String.valueOf(ERequest.method); 
     requestUrl = String.valueOf(ERequest.mReqUrl); 
     if(requestMethod.equals(Request.Method.GET)){ 
      requestMethod = "GET"; 
     }else if(requestMethod.equals(Request.Method.POST)){ 
      requestMethod = "POST"; 
     }else if(requestMethod.equals(Request.Method.PUT)){ 
      requestMethod = "PUT"; 
     }else if(requestMethod.equals(Request.Method.DELETE)){ 
      requestMethod = "DELETE"; 
     } 

Long tsLong = System.currentTimeMillis()/1000; 
     final String ts = tsLong.toString(); 

     final String kk = requestMethod+"&" + encode(requestUrl)+"&"; 
     final String kk = encode("GET"+"&" 
       + requestUrl+"&" 
       + OAUTH_CONSUMER_KEY + "=\"4e77abaec9b6fcda9b11e89a9744c2e1\"&" 
       +OAUTH_NONCE + "=\"" + getNonce()+ "\"&" 
       +OAUTH_SIGNATURE_METHOD + "=\""+OAUTH_SIGNATURE_METHOD_VALUE+"\"&" 
       +OAUTH_TIMESTAMP + "=\"" + ts + "\"&" 
       +OAUTH_TOKEN +"=\"2da943934104293b167fe2feaffca9a1\""); 


     RequestQueue queue = VolleyUtils.getRequestQueue(); 
     try { 
      JSONObject jsonObject = ERequest.jsonObject; 


      EJsonRequest myReq = new EJsonRequest(ERequest.method, ERequest.mReqUrl, jsonObject, createReqSuccessListener(ERequest), createReqErrorListener(ERequest)) { 

       public Map < String, String > getHeaders() throws AuthFailureError { 
//     Long tsLong = System.currentTimeMillis()/1000; 
//     String ts = tsLong.toString(); 
        String strHmacSha1 = ""; 
        String oauthStr = ""; 

        strHmacSha1 = generateSignature(kk, oAuthConsumerSecret, oAuthTokenSecret); 
        strHmacSha1 = toSHA1(strHmacSha1.getBytes()); 

        Log.e("SHA !",strHmacSha1); 


        oauthStr ="OAuth "+ OAUTH_CONSUMER_KEY + "=\"4e77abaec9b6fcda9b11e89a9744c2e1\"," 
          +OAUTH_TOKEN +"=\"2da943934104293b167fe2feaffca9a1\"," 
          +OAUTH_SIGNATURE_METHOD + "=\""+OAUTH_SIGNATURE_METHOD_VALUE+"\"," 
          +OAUTH_TIMESTAMP + "=\"" + ts + "\"," 
          +OAUTH_NONCE + "=\"" + getNonce()+ "\"," 
          +OAUTH_VERSION + "=\"" + OAUTH_VERSION_VALUE + "\"," 
          +OAUTH_SIGNATURE + "=\"" + strHmacSha1+ "\""; 

        Log.e("VALUE OF OAuth str",oauthStr); 


        Map<String, String> params = new HashMap<String, String>(); 
           params.put("Content-Type", "application/json"); 
           params.put("Authorization",oauthStr); 
           // params.put("Authorization",getConsumer().toString()); 



           return params; 

       } 


      }; 

      myReq.setRetryPolicy(new DefaultRetryPolicy(
        DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 4, 
        BABTAIN_MAX_RETRIES, 
        BABTAIN_BACKOFF_MULT)); 
           myReq.setHeader("Cache-Control", "no-cache"); 
          //myReq.setHeader("Content-Type", "application/json"); 
           queue.add(myReq); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

private String generateSignature(String signatueBaseStr, String oAuthConsumerSecret, String oAuthTokenSecret) { 
     byte[] byteHMAC = null; 
     try { 
      Mac mac = Mac.getInstance("HmacSHA1"); 
      SecretKeySpec spec; 
      if (null == oAuthTokenSecret) { 
       String signingKey = encode(oAuthConsumerSecret) + '&'; 
       spec = new SecretKeySpec(signingKey.getBytes(), "HmacSHA1"); 
      } else { 
       String signingKey = encode(oAuthConsumerSecret) + '&' + encode(oAuthTokenSecret); 
       spec = new SecretKeySpec(signingKey.getBytes(), "HmacSHA1"); 
      } 
      mac.init(spec); 
      byteHMAC = mac.doFinal(signatueBaseStr.getBytes()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     String base64 = Base64.encodeToString(byteHMAC, Base64.DEFAULT); 
     return base64.trim(); 
    } 

    private String toSHA1(byte[] convertme) { 
     MessageDigest md = null; 
     try { 
      md = MessageDigest.getInstance("SHA-1"); 
     } 
     catch(NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     return byteArrayToHexString(md.digest(convertme)); 
    } 

    private String byteArrayToHexString(byte[] b) { 
     String result = ""; 
     for (int i=0; i < b.length; i++) 
      result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1); 
     return result; 
    } 

этот код создать подпись, как: oauth_signature = "42a611860e29e893a435b555e7a9559a704f4e94" и он не смог получить autherization.

получать ошибки как: BasicNetwork.performRequest:? Неожиданный код ответа 401 для URL

Как создать oauth_signature как почтальон при условии использования залпа .. как я могу улучшить этот код ли какие-либо библиотеки или функция по умолчанию, чтобы сделать это

? Как добавить OAuth1 подписи в залпе ..

Пожалуйста, помогите .. спасибо

+0

Как вы реализовали его в Volley? –

ответ

2

Я только что нашел GitHub пример для генерации подписи, соответствующего временного значения в OAuth1 и успешно интегрироваться в мой проект

здесь ссылка: https://github.com/rameshvoltella/WoocommerceAndroidOAuth1

+0

Работает ли он, когда вы отправляете параметры запроса, такие как per_page или фильтр? –

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