Nano Hash - криптовалюты, майнинг, программирование

Android: Генерация подписи Oauth1 в запросе залпа

Я пытаюсь добавить авторизацию Oauth1 в свое приложение для Android, используя залп

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

Добавление данных авторизации в Postman

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

Заголовок, созданный почтальоном

Заголовок, сгенерированный почтальоном

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" и не может пройти аутентификацию.

получение ошибки, например: BasicNetwork.performRequest: неожиданный код ответа 401 для URL-адреса

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

?Как мы добавляем подпись oauth1 в залп..

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


  • Как вы реализовали это в Volley? 27.02.2018

Ответы:


1

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

вот ссылка: https://github.com/rameshvoltella/WoocommerceAndroidOAuth1

04.01.2017
  • Это работает, когда вы отправляете параметры запроса, такие как per_page или filter? 05.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..