Java - Выполнение запроса с проверкой подлинности oAuth1.0 с заданным consumerKey, consumerSecret, accessToken, accessTokenSecret и областью - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь отправить сообщение http на заданную защищенную конечную точку oAuth1.0, владелец предоставленной мне конечной точки:

  • consumerKey
  • consumerSecret
  • accessToken
  • accessTokenSecret
  • realm

Я написал некоторый код, основанный на Как вызывать API (Oauth 1.0)?

public class HttpAuthPost {
    public HttpAuthPost() {
        realmID = "XXXXXXX";
        String consumerKey = "kjahsdkjhaskdjhaskjdhkajshdkajsd";
        String consumerSecret = "jklahsdkjhaskjdhakjsd";
        String accessToken = "iuyhiuqhwednqkljnd";
        String accessTokenSecret = "oihkhnasdiguqwd56qwd";
        setupContext(consumerKey, consumerSecret, accessToken, accessTokenSecret);
    }

    public void setupContext(String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret) {
        this.oAuthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
        oAuthConsumer.setTokenWithSecret(accessToken, accessTokenSecret);
        oAuthConsumer.setSigningStrategy(new AuthorizationHeaderSigningStrategy());

    }

    public void authorize(HttpRequestBase httpRequest) throws FMSException {
        try {
            oAuthConsumer.sign(httpRequest);
        } catch (OAuthMessageSignerException e) {
            throw new FMSException(e);
        } catch (OAuthExpectationFailedException e) {
            throw new FMSException(e);
        } catch (OAuthCommunicationException e) {
            throw new FMSException(e);
        }
    }

    public String executeGetRequest(String customURIString, String _content) throws UnsupportedEncodingException {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost httpRequest = null;
    //Preparing HttpEntity and populating httpRequest
        try {
            authorize(httpRequest);
        } catch (FMSException e) {
            e.printStackTrace();
        }
        HttpResponse httpResponse = null;
        try {
            HttpHost target = new HttpHost(uri.getHost(), -1, uri.getScheme());
            httpResponse = client.execute(target, httpRequest);
      // Process response and generate output
      return output;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

Я провел несколько тестов и получаю эту ошибку: USER_ERROR: заголовок не является схемой NLAuth.

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

У кого-нибудь есть подсказки по этому поводу?

1 Ответ

0 голосов
/ 14 мая 2019

Ну, решение было на самом деле довольно простым, и теперь, когда я понял это, оно кажется очевидным.Добавление области в качестве дополнительного параметра к authconsumer работало для меня.

Надеюсь, что это поможет кому-то еще в будущем.

public void setupContext(String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret) {
  this.oAuthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
  oAuthConsumer.setTokenWithSecret(accessToken, accessTokenSecret);
  oAuthConsumer.setSigningStrategy(new AuthorizationHeaderSigningStrategy());
  HttpParameters parameters = new HttpParameters();
  parameters.put("realm", realmID);
  oAuthConsumer.setAdditionalParameters(parameters);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...