我遵循 OAuth 1.0 协议,因此我可以按照身份验证流的步骤 5 向/oauth/identity 终结点发送经过身份验证的请求。
从文档中,发出请求涉及包含几个参数,如下所示。
我的请求是这样的:
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,并且从我的 Discogs 开发者设置中CONSUMER_SECRET和CONSUMER_KEY。
我的代码在 Java 中看起来是什么,因为这适用于安卓 Discogs 客户端:
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);
}
});
}
但我得到的是:{"消息":"您必须进行身份验证才能访问此资源。
使用 OAuth 库而不是手动生成这些请求可能会让您省去麻烦。 更多信息 阅读 https://www.rfc-editor.org/rfc/rfc5849#page-14