使用路标签署 HTTP 消息时获取 401
Getting 401 when signing HTTP message with signpost
我正在将我的网络应用程序与 AppDirect 集成,
为此,我使用 jersey.
创建了一个 java rs API
当我订阅一个事件时,我得到一个映射,其中包含用于签署我的请求的 oauth 值(密钥和秘密)和一个事件 url 我向其发出签名提取。
我正在按预期获得这些值(oauth 和事件url)。
现在,当我尝试使用库 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 = "Dummy";
- 虚拟秘密 = "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);
也在授权中尝试使用 key:secret
属性
这是通过 Postman Chrome 扩展测试时此服务的行为。
如果您使用的是 OAuth 提供程序,那么您需要为 AppDirect 和秘密获取有效的 api-key。
顺便说一句,第二个屏幕截图显示您不需要将 OAuth 令牌发送到 appdirect 到 https://www.appdirect.com/api/integration/v1/events/dummyOrder,因为它授权任何 url.
因此,根据您的说明,您必须添加适当的(秘密和密钥),然后 AppDirect OAuth 服务器将 return 给您一个有效的令牌,您将在寻址 AppDirect 的存储库时使用该令牌。或者您可以在每个请求中发送密钥。
我正在将我的网络应用程序与 AppDirect 集成, 为此,我使用 jersey.
创建了一个 java rs API当我订阅一个事件时,我得到一个映射,其中包含用于签署我的请求的 oauth 值(密钥和秘密)和一个事件 url 我向其发出签名提取。
我正在按预期获得这些值(oauth 和事件url)。
现在,当我尝试使用库 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 = "Dummy";
- 虚拟秘密 = "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);
也在授权中尝试使用 key:secret
属性
这是通过 Postman Chrome 扩展测试时此服务的行为。 如果您使用的是 OAuth 提供程序,那么您需要为 AppDirect 和秘密获取有效的 api-key。
顺便说一句,第二个屏幕截图显示您不需要将 OAuth 令牌发送到 appdirect 到 https://www.appdirect.com/api/integration/v1/events/dummyOrder,因为它授权任何 url.
因此,根据您的说明,您必须添加适当的(秘密和密钥),然后 AppDirect OAuth 服务器将 return 给您一个有效的令牌,您将在寻址 AppDirect 的存储库时使用该令牌。或者您可以在每个请求中发送密钥。