检索 LinkedIn 访问令牌

Posted

技术标签:

【中文标题】检索 LinkedIn 访问令牌【英文标题】:Retrieve LinkedIn access token 【发布时间】:2018-03-01 05:28:58 【问题描述】:

我正在尝试获取linkedIn oauth2 访问令牌,但我坚持向https://www.linkedin.com/oauth/v2/accessToken 发出最后一个请求

const body = new URLSearchParams([
  ['grant_type', 'authorization_code'],
  ['code', code],
  ['redirect_uri', 'http://localhost:3000/'],
  ['client_id', CLIENT_ID],
  ['client_secret', CLIENT_SECRET]
]);
const headers = new Headers('Content-Type': 'x-www-form-urlencoded'); 

window.fetch('https://www.linkedin.com/oauth/v2/accessToken', method: 'POST',body, headers)
.then(response => response.json())
.then(data => 
// rest of code
)

LinkedIn 返回

Fetch API 无法加载 https://www.linkedin.com/oauth/v2/accessToken。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'http://localhost:3000'。响应的 HTTP 状态代码为 404。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

所以我尝试在“no-cors”模式下提出请求。我有 200,但我无法获得响应正文,状态为 0,正文为 null 并且 response.json() 抛出 SyntaxError: Unexpected end of input。

【问题讨论】:

我也有同样的问题。 我也有同样的问题 【参考方案1】:

我发现了你的问题, Content-Type 标头值不正确。

应该是这样的

const headers = new Headers('Content-Type': 'application/x-www-form-urlencoded');

不是

const headers = new Headers('Content-Type': 'x-www-form-urlencoded');

文档:https://developer.linkedin.com/docs/oauth2(第 3 步)

【讨论】:

还是不行。无法加载linkedin.com/oauth/v2/accessToken:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:3000' 不允许访问。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。如果我添加标题 'Access-Control-Allow-Origin': '*' 它在预检失败...【参考方案2】:

对于遇到此问题的任何人。我们通过将数据从 LinkedIn(代码)传递到我们的后端来解决这个问题。后端无需发送任何预检 OPTIONS 请求,并且可以毫无问题地获取访问令牌。

【讨论】:

以上是关于检索 LinkedIn 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

LinkedIn工作搜索REST API问题

如何使用 iOS SDK 保存 LinkedIn 访问令牌?

使用linkedIn访问令牌时缺少client_id

Linkedin oauth 访问令牌刷新不会增加过期时间

如何正确实现linkedIn登录?

如何正确实现linkedIn登录?