由于签名无效,OAuth1a和请求正文的POST请求失败

时间:2016-06-08 07:48:38

标签: java rest oauth

我有OAuth和请求正文的跟随POST请求

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "firstname=martin");
Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/api/people/new")
  .post(body)
  .addHeader("authorization", "OAuth oauth_consumer_key=\"5jyytn5guw84os48scckwkkwkkckwkowcgow04g04oc84kg0c4\",oauth_token=\"qwertzuiop\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1465370390\",oauth_nonce=\"rFED5R\",oauth_version=\"1.0\",oauth_signature=\"aU2zedmum%2BwO3I%2FesAv159nLE8o%3D\"")
  .addHeader("cache-control", "no-cache")
  .addHeader("content-type", "application/x-www-form-urlencoded")
  .build();

Response response = client.newCall(request).execute();

问题是请求正文(带有form-urlencoded参数)和生成的oauth_signature。如果没有正文,我生成的签名是完全正确的,并且调用很顺利,但在添加请求正文之后,调用失败并显示401 - unauthorized

我认为只有oauth标头参数与oauth_signature计算相关?我绝对迷失了,并希望得到任何帮助。

1 个答案:

答案 0 :(得分:0)

好吧,显然我错了。实际上,您必须考虑使用body参数来创建签名。

  

接下来,收集请求中包含的所有参数。有   这些附加参数的两个这样的位置 - URL(作为一部分   查询字符串)和请求正文。

对于每个与此类似问题挣扎的人,我都可以推荐Twitters指南来创建签名和OAuth。请参阅以下链接

https://dev.twitter.com/oauth/overview/creating-signatures