我一直在按照位于here的文档将我的应用程序与LinkedIn集成。我在LinkedIn中创建了我的应用程序,并且能够成功检索授权代码,但在尝试获取访问令牌时出现以下错误:
{" error_description":"缺少必需参数,包括无效参数 参数值,参数不止一次。 :无法检索访问令牌:appId或重定向uri与授权代码或授权代码已过期不匹配","错误":" invalid_request"}
我已经验证了以下情况:
我试过的一些事情没有成功:
这是我目前的代码:
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();
}
授权网址(实际客户端ID代替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
有谁看到我做错了什么?如果我将这个已编译的URL并将其粘贴到浏览器中,我就可以检索访问令牌而不会出现任何问题。我的请求有问题吗?
答案 0 :(得分:0)
您似乎将请求的所有参数都包含在网址中的属性中,而不是POST
正文中包含x-www-form-urlencoded
元素。
查看此其他Stack线程,了解有关如何在请求正文中发送值而不是URL属性的详细信息:
答案 1 :(得分:0)
我终于能够弄清楚我的应用程序出了什么问题。我的本地环境未正确配置为https。将代码移动到使用https设置的开发框中可以解决问题。