【发布时间】:2016-10-31 08:33:44
【问题描述】:
我正在尝试使用 Java 中的 oauth2 授权令牌访问 API 这是客户端代码
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost(http://res-api");
post.setHeader("Content-Type","application/json");
post.setHeader("Authorization", "Bearer " + finalToken);
JSONObject json = new JSONObject();
// json.put ...
// Send it as request body in the post request
StringEntity params = new StringEntity(json.toString());
post.setEntity(params);
HttpResponse response = httpclient.execute(post);
httpclient.getConnectionManager().shutdown();
这会返回 401。
等效的 curl 命令使用相同的令牌没有问题:
curl -H "Content-Type:application/json" -H "Authorization:Bearer randomToken" -X POST -d @example.json http://rest-api
我尝试注销请求,看起来授权设置正确
DEBUG [2016-06-28 20:51:13,655] org.apache.http.headers: >> Authorization: Bearer authRandomToKen; Path=/; Domain=oauth2-server; Expires=Wed, 29 Jun 2016 20:51:13 UTC
我通过复制粘贴相同的标记尝试了 curl 命令,并且效果很好
虽然我也看到了这一行
DEBUG [2016-06-28 20:51:13,658] org.apache.http.impl.client.DefaultHttpClient: Response contains no authentication challenges
【问题讨论】:
-
尝试使用类似wireshark的东西来验证网络调用,CURL和Java看起来应该是一样的。很可能未发送授权标头。尝试使用 CURL 中的代码对其进行硬编码。
-
感谢您的指点,我用建议编辑了这个问题。没有运气
-
你能得到响应头吗?请求标头似乎还没有被识别。
-
响应头是否也应该包含身份验证令牌?我刚刚尝试记录它并没有
-
看起来没有设置标题
标签: java authentication curl httpclient bearer-token