Linkedin API访问令牌生成错误

时间:2014-09-08 11:28:13

标签: linkedin

我正在尝试生成访问令牌以收集linkedin数据。我按照linkedin API文档中提供的说明进行操作。我在开发者页面中创建了一个应用程序并获得以下内容:

Application Details
•   Company:
Fresher
•   Application Name:
xxxxxxxxxx
•   API Key:
75pcum6zb2cael
•   Secret Key:
xxxxxxxxxxxxxxxx
•   OAuth User Token:
xxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
•   OAuth User Secret:
xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx

使用 API密钥,我使用以下网址生成 authorization_code

  

https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=75pcum6zb2cael&state=DCEEFWF45453sdffef424&redirect_uri=https://www.google.com

但是当我最终尝试使用以下URL生成访问令牌时,我收到了错误响应:

  

https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=https://www.google.com&client_id=75pcum6zb2cael&client_secret=xxxxxxxxxxxxxxxx

     

{" error_description":"缺少必需参数,包括无效参数   参数值,参数不止一次。 :无法检索访问权限   token:appId或redirect uri与授权代码或   授权代码已过期","错误":" invalid_request"}

即使经过多次验证,也会出现相同的错误消息。

请帮忙。感谢。

5 个答案:

答案 0 :(得分:22)

最后,我获得了访问令牌。授权代码将在20秒后到期,因此必须在生成授权代码后立即调用访问令牌URL。

答案 1 :(得分:2)

我的问题出在redirect_uri中,其中包含带有查询参数的网址(例如redirect_uri=encodeURIComponent(http://example.com/callback?query=string))。

如果重定向URL完全不同,linkedin将在显示登录表单之前向您显示错误,但是如果redirect_url与您在linkedin应用程序中指定的内容匹配并且包含额外的查询参数,您将不会获得错误,因此一旦提交登录表单,您将获得一个无效的代码,并导致上述错误。

答案 2 :(得分:1)

此错误可能与范围相关。

在选择范围时,有关应用程序的详细信息,请输入以下消息:

enter image description here

  

同时选择r_basicprofile和r_fullprofile是多余的。   如果r_basicprofile和r_basicprofile都不会选择r_basicprofile   检查r_fullprofile。

如果您同时选择 r_basicprofile r_fullprofile ,只需取消选中 r_basicprofile ,或将其从Authorization Code Request中删除。

答案 3 :(得分:0)

我遇到了同样的问题,就我而言,我使用了不同的redirect_uri进行授权和访问令牌。我的"proxy": "localhost:3001"中有package.json,它覆盖了我的request_uri

所以我的建议是:确保两个请求(后端和服务器端)的主机和redirect_uri都相同。

答案 4 :(得分:-1)

好吧,我遇到了同样的问题,这是修复该问题的过程。

STEP#1:身份验证

  1. 首先,将击中身份验证API以获取身份验证令牌。
  2. 为此,带有 Encoded 参数的URL将作为 GET 请求被点击。
  3. 示例:https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=[your_client_id]&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flinkedin%2Fcallback&scope=r_emailaddress
  4. 请注意,这里的参数将以编程方式进行编码。
  5. 我的未编码的回调URL为:http://localhost:8080/linkedin/callback
  6. 因此,我的编码URL是:http%3A%2F%2Flocalhost%3A8080%2Flinkedin%2Fcallback

一旦您将此请求作为GET请求,您将收到带有code和可选state参数的回调。

步骤2:获取访问令牌:

此调用有三个先决条件:

  1. 呼叫必须为POST
  2. 它必须具有值为Content-Type的标题application/x-www-form-urlencoded
  3. 数据必须在请求正文中发送。
  4. redirect_url的值必须与上次调用相同
  5. 就我而言,它是:http://localhost:8080/linkedin/callback

现在的诀窍是,(STEP#1身份验证)中的调用是GET请求。因此,redirect_url必须以编程方式进行编码。

由于第二个调用是POST且也是application/x-www-form-urlencoded编码的,因此请求正文参数不必显式编码。因此,在这种情况下,redirect_uri将按原样(http://localhost:8080/linkedin/callback)发送

这是我通过邮递员访问令牌的快照: enter image description here

相关问题