【问题标题】:Retrieve Access Token with LinkedIn JS SDK to use in Back-end使用 LinkedIn JS SDK 检索访问令牌以在后端使用
【发布时间】:2018-01-16 19:19:36
【问题描述】:

目前,我的 Facebook 和 LinkedIn Oauth2 流程都可以正常工作。因为在某些情况下我不希望用户重定向到另一个页面,所以我使用运行良好的 Facebook JS SDK,检索访问令牌并将其发送到服务器,在该服务器上我通过 REST 调用检索用户数据。

不幸的是,我在使用 LinkedIn JS SDK 时没有成功。官方文档在这方面根本没有帮助:https://developer.linkedin.com/docs/getting-started-js-sdk

我在服务器中检索用户数据,因为在客户端很容易伪造假数据并将其发送到服务器,因此不能选择客户端解决方案。

如果我尝试在 REST API 中使用我在 js 中获得的令牌,我会得到 Invalid access token. (401)

这里有几个未解决的问题在 SO 中没有任何响应(或有用的响应):

2015-08-03 - 没有回应: Javascript: Linkedin Access TOken

2016-05-29 - 没有回应: can I get access token through LinknedIn JS SDK?

2016-08-31 - 没有有用的响应(在前端检索数据): How to Get Access Token Using LinkedIn API JavaScript SDK

2017-06-30 - 没有有用的回复: LinkedIn OAuth token with Javascript SDK


在下面的问题中,有一条评论说明了我的猜测:

[...] 老实说,我认为 JS API 像这样完全没用 因为如果你不能验证/使用令牌服务器端你基本上 无法信任任何信息。

2015-07-22 - 没有有用的响应(在前端检索数据): get linkedin Access Token with JavaScript SDK


有一些关于用 REST API OAuth 令牌交换 Javascript API 令牌的信息,但在参考资料中我发现链接已损坏(根据复杂性,这样做是不切实际的,而不是使用直接使用令牌,就像在 Facebook JS SDK 中一样):

http://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens https://developer-programs.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens


所以,我想知道是否有某种方法可以使用 JS SDK 登录 LinkedIn 并使用 REST 调用在后端检索用户数据(就像我在 Oauth2 flow),希望有官方文档。

【问题讨论】:

  • 你有没有找到解决这个问题的方法?我有完全相同的问题。
  • @justADreamer 查看我标记为已接受的答案(来自@dbeja)。我现在调用它而不是调用 https://api.linkedin.com/v1/people/~[...]?oauth2_access_token=[token]&format=json,而是在标题 https://api.linkedin.com/v1/people/~[...]?format=json + Headers { 'oauth_token': [token] } 中传递 oauth 令牌。
  • 是的。但是我仍然需要以某种方式获取访问令牌,因为我的后端严重依赖于使用长期访问令牌:-|我认为我无法用访问令牌交换我的 oauth 令牌。
  • @justADreamer 在我的情况下,我只使用令牌来检索用户数据(尤其是 id 和电子邮件),因为这些是不应该直接从前端传递的重要数据。我的用例中不需要长期存在的令牌,我也没有使用过它们(除非我在不知道它们长期存在的情况下使用它们:P),所以我真的无法帮助你。

标签: linkedin linkedin-jsapi


【解决方案1】:

我遇到了同样的问题,我发现使用 JS 令牌的唯一方法是添加标头 oauth_token 而不是 Authorization Bearer 标头:

POST https://api.linkedin.com/v1/people/~:(id,firstName,lastName,picture-url,email-address)?format=json
Headers {
  'oauth_token': JS_TOKEN
}

我从 IN.ENV.auth.oauth_token 在前端读取的 JS_TOKEN。

【讨论】:

  • 谢谢,@dbeja。不幸的是,我仍然无法登录,尽管至少现在错误有所不同。我现在有[unauthorized]. Expired access token. Timestamp: 1451220123987 (401)。时间戳似乎是从 2015 年开始的。我不认为访问令牌是(或应该是)旧的,因为每次我重新加载页面我都会得到一个新的,过期字段是 1800(我认为以秒为单位,所以 30 分钟? ),但即便如此,我总是得到这个回应。有什么想法吗?
  • 修复了!当我打电话给IN.init(...) 时,我正在通过authorize: true。我认为它使用了一些旧的 cookie 或类似的东西(奇怪的是每个请求的访问令牌都不同)。我删除了这个字段并且它起作用了。谢谢@dbeja!
【解决方案2】:

我一直在为同样的问题苦苦挣扎,这就是我解决它的方法(不使用 JS SDK):

第 1 步:将用户发送到 LinkedIn 登录页面,在 redirect_uri 参数中使用端点来处理与 LinkedIn 相关的所有逻辑。

第 2 步:当用户完成登录后,Linkedin 将向该端点发送一个 GET 请求,该请求将有一个“授权令牌”,该令牌只是一个临时令牌,它不会让您获取您的用户数据。

第 3 步:使用您刚刚收到的 Authorization Token 向 Linkedin 发送 post 请求

第 4 步:Linkedin 会给你发回一个访问令牌(这是你要找的那个),现在你可以请求所有你想要的信息了

第 5 步:将用户重定向回您的网络应用。

请求的结构以及锚标记参数可在此处获得:https://developer.linkedin.com/docs/oauth2

【讨论】:

  • 感谢您的回复。不幸的是,我试图避免将用户重定向到另一个页面。我已经有一个适用于 LinkedIn 的 Oauth2 流程,我在服务器中接收代码并使用它来检索访问令牌。但是,在某些情况下,我希望用户在不重定向到另一个页面的情况下进行登录,这就是我想使用 JS SDK 而不是 Oauth2 流程的原因。
  • 发布此答案后,我修复了应用程序中的重定向位,我在新窗口中打开了linkedin的登录表单,当整个过程完成后,我将数据发送到主窗口.
猜你喜欢
  • 2018-03-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2013-03-18
相关资源
最近更新 更多