我正在将我的网络应用程序与 AppDirect 集成, 为此,我使用 jersey 创建了一个 java rs API。
当我订阅一个事件时,我会得到一个映射,其中包含用于签署我的请求的 oauth 值( key 和 secret )和一个我向其发出签名提取的事件 URL。
我正在按预期获得这些值(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
我还尝试了以下测试值:
- url = "https://www.appdirect.com/api/integration/v1/events/dummyOrder ";
- dummyKey = "虚拟";
- dummySecret = " secret "; 但我得到了相同的结果。
请问我该如何解决?
我也试过添加这个:
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);
还尝试在 Authorization 属性中使用 key:secret
最佳答案
这是通过 Postman Chrome 扩展程序测试时此服务的行为。 如果您使用的是 OAuth 提供程序,那么您需要为 AppDirect 和 secret 获取有效的 api key 。
顺便说一句,第二个屏幕截图显示您不需要将 OAuth token 发送到 appdirect 到 https://www.appdirect.com/api/integration/v1/events/dummyOrder , 因为它授权任何 url。
因此,根据您的说明,您必须添加适当的( secret 和 key ),然后 AppDirect OAuth 服务器将返回一个有效 token ,您将在寻址 AppDirect 的存储库时使用该 token 。或者您可以在每个请求中发送 key 。
关于java - 使用路标签署 HTTP 消息时获取 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37457427/