Как отправить аутентифицированный запрос в Discogs Api

Я следую протоколу OAuth 1.0, поэтому могу отправить запрос с проверкой подлинности конечной точке / oauth / identity, как на шаге 5 потока проверки подлинности.

Из документа вы можете указать несколько параметров, как показано здесь.

Как выглядят мои запросы:

http://api.discogs.com/oauth/identity?
oauth_consumer_key=CONSUMER_KEY&
oauth_nonce=1453720099377&
oauth_signature=CONSUMER_SECRET&ACCESS_TOKEN_SECRET&
oauth_signature_method=PLAINTEXT&
oauth_timestamp=1453720099377&
oauth_token=ACCESS_TOKEN

где ACCESS_TOKEN и ACCESS_TOKEN_SECRET являются производными от шага 4 руководства Auth Flow, а CONSUMER_SECRET и CONSUMER_KEY - из моих настроек разработчика Discogs.

Что мой код выглядит на Java, так как это для клиента Discogs для Android:

public void getIdentity() {
    httpClient.addHeader("Content-Type", "application/x-www-form-urlencoded");
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("OAuth oauth_consumer_key=\"").append(Constants.CONSUMER_KEY).append("\",");
    stringBuilder.append("oauth_nonce=\"").append(String.valueOf(System.currentTimeMillis())).append("\",");
    stringBuilder.append("oauth_signature=\"").append(Constants.CONSUMER_SECRET).append(authAccessSecretToken).append("\",");
    stringBuilder.append("oauth_signature_method=\"PLAINTEXT\",");
    stringBuilder.append("oauth_timestamp=\"").append(String.valueOf(System.currentTimeMillis())).append("\",");
    stringBuilder.append("oauth_token=\"").append(authAccessToken).append("\"");
    httpClient.addHeader("Authorization", stringBuilder.toString());
    httpClient.addHeader("User-Agent", "Discs/1.0 +https://jb.com");
    httpClient.get(identityURL, null, new TextHttpResponseHandler() {

        @Override
        public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
            Log.d(TAG, "onFailure IDENTITY " + i + "  Throwable = " + throwable);
            Log.d(TAG, "onFailure IDENTITY " + s);
        }

        @Override
        public void onSuccess(int i, Header[] headers, String s) {
            Log.i(TAG, "onSuccess IDENTITY -- String= " + s);
        }
    });

}

Но я получаю следующее: {"message": "Вы должны авторизоваться для доступа к этому ресурсу."}

1 ответ

Использование библиотеки OAuth вместо генерации этих запросов вручную, скорее всего, избавит вас от головной боли. больше информации читайте http://tools.ietf.org/html/rfc5849

Другие вопросы по тегам