I have been working on integrating my application with LinkedIn by following the documentation located here. I have created my application in LinkedIn and am able to successfully retrieve the authorization code but I am getting the following error when trying to get the access token :
{"error_description":"missing required parameters, includes an invalid parameter value, parameter more than once. : Unable to retrieve access token : appId or redirect uri does not match authorization code or authorization code expired","error":"invalid_request"}
I have verified the following to be true:
- The redirect uri is the same for the authorization request and access token request
- I am using the authorization code within 20 seconds of it being issued.
- I am including "Content-Type:application/x-www-form-urlencoded" in the request header
Some things I have tried with no success:
- Posting the request with the parameters as part of the url
- Posting the request with parameters as part of the body
- sending the redirect uri as both encoded and plain text
- using a get request instead of a post.
Here is my current code:
linkedin_access_token_url = "https://www.linkedin.com/uas/oauth2/accessToken?"+
                "grant_type=authorization_code"+
                "&code="+ authCode
                + "&redirect_uri=https://localhost:8090/ProfileSetup/linkedInAuth.jsp
                + "&client_id=" + linkedin_client_id
                + "&client_secret=" + linkedin_client_secret;
        HttpClient http = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(linkedin_access_token_url);
        try {
            httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");
            HttpResponse response = http.execute(httppost);
            HttpEntity entity = response.getEntity();
            System.out.println("status code " +
            response.getStatusLine().getStatusCode()); 
            System.out.println("statusreason"+
            response.getStatusLine().getReasonPhrase());
            InputStream stream = entity.getContent();
            StringBuilder sb = new StringBuilder();
            String line;
            try {
                br = new BufferedReader(new InputStreamReader(stream));
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
            } catch (Exception e) {
            }
            String resp = sb.toString();
            System.out.println("response " + resp);
        } catch (Exception ex) {
            System.out.println("linked in  HttpResponse Error: " + ex);
        } finally {
            httppost.releaseConnection();
        }
And the authorization url (actual client id is sent in place of linkedin_client_id):
https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=linkedin_client_id&redirect_uri=https://localhost:8090/ProfileSetup/linkedInAuth.jsp&state=0kcmjj5504tpgb9&scope=r_basicprofile
Does anyone see what I am doing wrong? If I take this compiled url and paste it in the browser, I am able to retrieve an access token without any issue. Is there a problem with my request?
 
     
     
    