Twitter oauth2 using javax.ws.rs

I have this request for twitter using javax.ws.rs

    WebTarget target = new WebTargetBuilder(client, OAUTH_API_ENDPOINT).build();

    Builder request = target
            .request(MediaType.APPLICATION_JSON)
            .header("Authorization", "Basic " + encodedCredentials)
            .header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
    Response postResponse = request
            .post(Entity.entity("grant_type=client_credentials", MediaType.TEXT_PLAIN));

    System.out.println(postResponse.readEntity(String.class));

encodedCredentials is my user secret and consumer key encoded in base 64.

The query I'm trying to do is:

POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                 NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==Content-Type: application/x-www-   form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip

grant_type=client_credentials

I keep getting 403 Forbidden: {"errors": [{"code": 170, "message": "Missing required parameter: grant_type", "label": "forbidden_missing_parameter"}]}

It seems that the message body is not configured correctly, does anyone know how to install it?

+4
source share
3 answers

What you can try is to change the content type of the body / object of the POST request as follows:

 .post(Entity.entity("grant_type=client_credentials",  MediaType.APPLICATION_FORM_URLENCODED)
+2

PHP, , , oauth_signature

0

Thus, the final code for receiving a token carrier from Twitter with the consumer key and consumer secret is as follows:

  private static final String OAUTH_API_ENDPOINT = "https://api.twitter.com/oauth2/token";
  private String consumerKey = "your consumer key";
  private String consumerSecret = "your consumer secret";

// Constructs the request for requesting a bearer token and returns that
// token as a string
public String requestBearerToken() throws IOException, InterruptedException, ExecutionException {

    String encodedCredentials = encodeCredentials();

    Client client = ClientBuilder.newClient();

    WebTarget target = new WebTargetBuilder(client, OAUTH_API_ENDPOINT).build();

    Response postResponse = target
            .request(MediaType.APPLICATION_JSON)
            .header("Authorization", "Basic " + encodedCredentials + "Content-Type: application/x-www-form-urlencoded;charset=UTF-8")
            .post(Entity.entity("grant_type=client_credentials", MediaType.APPLICATION_FORM_URLENCODED));

    return postResponse.toString();
}

// Encodes the consumer key and secret to create the basic authorization key
public String encodeCredentials() {
    try {
        String encodedConsumerKey = URLEncoder.encode(consumerKey, "UTF-8");
        String encodedConsumerSecret = URLEncoder.encode(consumerSecret,
                "UTF-8");

        String fullKey = encodedConsumerKey + ":" + encodedConsumerSecret;
        byte[] encodedBytes = Base64.encodeBase64(fullKey.getBytes());
        return new String(encodedBytes);
    } catch (UnsupportedEncodingException e) {
        return new String();
    }
}
0
source

All Articles