Java HttpClient 中的授权承载令牌?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/38085964/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Authorization Bearer token in HttpClient?
提问by user_mda
I am trying to access an API using an oauth2 authorization token in Java Here is the client code
我正在尝试使用 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();
This returns a 401.
这将返回 401。
An equivalent curl command works with no issues with the same token:
等效的 curl 命令使用相同的令牌没有问题:
curl -H "Content-Type:application/json" -H "Authorization:Bearer randomToken" -X POST -d @example.json http://rest-api
I tried logging out the request and it looks like the authorization is set correctly
我尝试注销请求,看起来授权设置正确
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
I tried out the curl command by copy-pasting this same token and t works fine
我通过复制粘贴相同的标记来尝试 curl 命令,并且 t 工作正常
Although I also see this line
虽然我也看到了这条线
DEBUG [2016-06-28 20:51:13,658] org.apache.http.impl.client.DefaultHttpClient: Response contains no authentication challenges
回答by Red Boy
I was trying to make a HTTP call using Java, wanted to pass the bearer token OAuth2.0. I was able to do it by following way, I hope this will help others.
我试图使用 Java 进行 HTTP 调用,想传递不记名令牌 OAuth2.0。我能够通过以下方式做到这一点,我希望这会对其他人有所帮助。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConnectionExample {
public static void main(String[] args) throws Exception {
// Sending get request
URL url = new URL("http://example-url");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization","Bearer "+" Actual bearer token issued by provider.");
//e.g. bearer token= eyJhbGciOiXXXzUxMiJ9.eyJzdWIiOiPyc2hhcm1hQHBsdW1zbGljZS5jb206OjE6OjkwIiwiZXhwIjoxNTM3MzQyNTIxLCJpYXQiOjE1MzY3Mzc3MjF9.O33zP2l_0eDNfcqSQz29jUGJC-_THYsXllrmkFnk85dNRbAw66dyEKBP5dVcFUuNTA8zhA83kk3Y41_qZYx43T
conn.setRequestProperty("Content-Type","application/json");
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String output;
StringBuffer response = new StringBuffer();
while ((output = in.readLine()) != null) {
response.append(output);
}
in.close();
// printing result from response
System.out.println("Response:-" + response.toString());
}
}
回答by Nilucshan Siva
I was trying to do something similar using HttpClient and I got it working by making a small change as below.
我试图使用 HttpClient 做类似的事情,我通过如下的小改动让它工作。
post.setHeader(HttpHeaders.CONTENT_TYPE,"application/json");
post.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + finalToken);