使用路标签署HTTP消息时获取401

时间:2016-05-26 09:55:51

标签: java oauth httpurlconnection signpost appdirect

我正在将我的网络应用与AppDirect集成, 为此我用jersey创建了一个java rs API。

当我订阅一个活动时,我会得到一张地图,其中包含用于签署我的请求的oauth值(密钥和密钥)以及我向其发出签名的事件网址。

我正在按预期获得这​​些值(oauth和eventurl)。

现在,当我尝试使用库signpost发出签名提取时,我使用以下代码:

OAuthConsumer consumer = new DefaultOAuthConsumer(consumer_key, secret);
// create an HTTP request to a protected resource
URL url = new URL(eventUrl);
HttpURLConnection request = (HttpURLConnection) url.openConnection();

// sign the request
consumer.sign(request);

// send the request
request.connect();

我收到此错误消息:

getResponseMessage: Unauthorized
getresponsecode: 401

我还尝试了以下测试值:

  1. url =“https://www.appdirect.com/api/integration/v1/events/dummyOrder”;
  2. dummyKey =“Dummy”;
  3. dummySecret =“secret”; 但我得到了同样的结果。
  4. 请问我该如何解决?

    我也试过并添加了这个:

    request.setRequestMethod("GET");         
    
    request.setRequestProperty("Authorization", "OAuth");
    
    request.setRequestProperty("Host", "...");
    
    request.setRequestProperty("Content-Type", "application/xml");         
    
    request.setRequestProperty("oauth_nonce", oauth_nonce);
    
    request.setRequestProperty("oauth_signature", oauth_signature);
    
    request.setRequestProperty("oauth_signature_method", oauth_signature_method);
    
    request.setRequestProperty("oauth_timestamp", oauth_timestamp);
    
    request.setRequestProperty("oauth_version", oauth_version);
    

    还尝试使用授权属性中的key:secret

1 个答案:

答案 0 :(得分:2)

Dummy keys (oauth)

No-auth

以下是通过Postman Chrome扩展程序进行测试时此服务的行为。 如果您使用的是OAuth提供程序,那么您需要为AppDirect获取有效的api-key和密码。

BTW第二个屏幕截图显示您不需要将OAuth令牌发送到appdirect到https://www.appdirect.com/api/integration/v1/events/dummyOrder,因为它会授权任何网址。

因此,根据您的说明,您必须添加正确的(密钥和密钥),然后AppDirect OAuth服务器将返回您在寻址AppDirect的存储库时将使用的有效令牌。或者您可以在每次请求时发送密钥。