2016-06-08 491 views
0

我有使用OAuth后续POST请求和请求主体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(); 

问题是请求主体(与窗体-urlencoded参数)和所生成的oauth_signature。没有身体,我生成的签名是绝对正确的,并且通话很顺利,但是在添加请求主体之后,呼叫失败,出现401 - unauthorized

我认为只有oauth头参数与oauth_signature计算相关?我绝对失去了,并会感谢任何帮助。

回答

0

好吧,显然我错了。实际上,您必须考虑身体参数才能创建签名。

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

对于每个人都在努力解决类似问题,我可以推荐Twitters指南来创建签名和OAuth。看到下面的链接

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