我如何从HttpClient获取Bearer令牌?

时间:2019-05-10 06:02:51

标签: java oauth authorization httpclient bearer-token

我正在尝试通过HttpClient发送POST请求,但是服务器响应显示“未经授权”错误。如何获得无记名令牌?我在寻找解决方案,但我不明白。

那是我的代码,我不知道如何获取请求的令牌...

HttpPost request = new HttpPost("http://domain...");
request.setHeader(HttpHeaders.ACCEPT, "application/json, text/plain, */*");
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/#json");
request.setHeader(HttpHeaders.ACCEPT_LANGUAGE, "de,en-US;q=0.7,en;q=0.3");
request.setHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br");
request.setHeader(HttpHeaders.REFERER, "https://domain...");
request.setHeader("DNT", "1");
request.setHeader(HttpHeaders.HOST, "host..");
String authToken = ""; // ... ?
request.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken);
StringEntity params = new StringEntity("{}");
params.setContentEncoding("UTF-8");
request.setEntity(params);
response = this.getHttpClient().execute(request);

2 个答案:

答案 0 :(得分:0)

首先,您必须使用用户名和密码(使用HTTP调用)对用户进行身份验证,然后您将获得令牌作为响应,可以将其添加到标题中的下一个POST调用中。

在POST调用之前,必须先进行一次get / post调用,这样您才能获得令牌。 相同的令牌可用于所有其他呼叫。

答案 1 :(得分:0)

您似乎正在尝试访问某些API,这要求您先获得一些访问令牌(承载令牌),然后才能使用实际的API。

大多数流程涉及两个步骤,如下所述。

第1步。 通过基本身份验证获取承载令牌(端点和参数下方为示例值,对于您的API而言将有所不同)

POST /auth 
`request.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + authToken);`

步骤2: 步骤1将为您提供某种访问令牌作为响应。您需要使用它来进行后续的API调用。

GET /Student/Mark
`request.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken);`

您可以在What is the OAuth 2.0 Bearer Token exactly?

上了解有关承载令牌的更多信息。

如果您仍然有疑问或无法使用我提到的方法访问API,请告诉我。