【问题标题】:Linkedin API access token generation errorLinkedin API 访问令牌生成错误
【发布时间】:2014-11-01 14:41:06
【问题描述】:

我正在尝试生成访问令牌来收集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 Key 我生成了 authorization_code 和 URL:

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":"缺少必填参数,包含无效参数 参数值,参数不止一次。 : 无法检索访问 令牌:appId 或重定向 uri 与授权码不匹配或 授权码过期","error":"invalid_request"}

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

请帮忙。谢谢。

【问题讨论】:

  • 不是编程问题,而是供应商 API 的问题。
  • 能详细解释一下,是什么bug?能否请您发布您的答案,这样会有所帮助

标签: linkedin


【解决方案1】:

最后,我得到了访问令牌。授权码20秒后过期,生成授权码后必须立即调用访问令牌URL。

【讨论】:

  • 我得到 accessToken 但没有得到 secretToken 值!!任何想法。
  • 我遇到了同样的错误。无法获取访问令牌。甚至在我从参数中获取“代码”之前,它就会引发异常。
  • 在我的例子中,代码是在前端生成的(角度),我设置了 redirect_uri=192.168.1.133:9004/v1.0/jobSeeker/getSocialMediaUser 作为重定向 url;但是我得到了下面的错误..尝试生成 access_token 时无法检索访问令牌:appid/redirect uri/code verifier 与授权码不匹配。或者授权码过期。或者存在外部成员绑定
  • 谁能告诉我我的代码出了什么问题?
  • @KetavChotaliya ,您是如何解决错误的?你能在这里发表你的答案吗
【解决方案2】:

好吧,我遇到了同样的问题,这是我解决它的过程。

第 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. 因此,我的编码网址是: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)

这是我通过邮递员获得的访问令牌 API 的快照:

【讨论】:

  • 快照和有关“编码”或“非编码”URL 的详细信息解决了我的问题
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    此错误可能与范围有关。

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

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

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

    【讨论】:

    • 你能帮我吗,因为我面临同样的问题。我尝试了很多方法。分享我的问题链接https://stackoverflow.com/questions/52501144/unable-to-get-access-token-linkedin-oauth
    • 这些权限还有效吗?我只看到 r_emailaddress` 和 r_liteprofile,其他所有内容似乎都已被linkedin 删除。
    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2020-05-06
      • 2014-03-07
      • 2020-02-29
      • 2016-03-22
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多