使用LinkedIn JS SDK检索访问令牌以在后端使用

使用LinkedIn JS SDK检索访问令牌以在后端使用,linkedin,linkedin-jsapi,Linkedin,Linkedin Jsapi,目前我的Facebook和LinkedIn Oauth2流量都运行良好。因为在某些情况下,我不希望用户重定向到另一个页面,所以我使用工作正常的Facebook JS SDK,检索访问令牌并将其发送到服务器,在那里我通过REST调用检索用户数据 不幸的是,我没有成功地用LinkedIn JS SDK实现同样的功能。官方文件在这方面毫无帮助: 我在服务器中检索用户数据,因为很容易在客户端伪造假数据并将其发送到服务器,因此客户端解决方案不是一个选项 如果我试图使用RESTAPI中js中的令牌,我会得到

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

不幸的是,我没有成功地用LinkedIn JS SDK实现同样的功能。官方文件在这方面毫无帮助:

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

如果我试图使用RESTAPI中js中的令牌,我会得到无效的访问令牌。(401)

在SO中,有几个开放式问题没有任何回答(或有用的回答):

2015-08-03-无回应:

2016-05-29-无回应:

2016-08-31-没有有用的响应(在前端检索数据):

2017-06-30-没有有用的回复:


在下面的问题中,有一条评论说了我已经猜到的:

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

2015-07-22-没有有用的响应(在前端检索数据):


有一些关于用REST API OAuth令牌交换Javascript API令牌的信息,但是在引用中,我发现链接被破坏了(根据复杂性,这样做是不切实际的,而不是直接使用令牌,如在Facebook JS SDK中):



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

我已经为同一问题挣扎了一段时间,这是我解决问题的方法(不使用JS SDK):

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

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

步骤3:使用您刚刚收到的授权令牌,向Linkedin发送post请求

第四步:Linkedin将向您发回一个访问令牌(这是您正在寻找的令牌),现在您可以请求您想要的所有信息

步骤5:将用户重定向回web应用


请求的结构以及锚定标记参数在此处可用:

我遇到了相同的问题,我发现使用JS令牌的唯一方法是添加头oauth_令牌,而不是授权承载头:

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

我在前端从.ENV.auth.oauth_-TOKEN的中阅读的JS_-TOKEN

感谢您的回复。不幸的是,我试图避免将用户重定向到另一个页面。我已经有了一个用于LinkedIn的Oauth2流,我在服务器中接收代码并使用它检索访问令牌。但是,在某些情况下,我希望用户在不重定向到其他页面的情况下进行登录,这就是为什么我希望使用JS SDK而不是Oauth2流的原因。发布此答案后,我在应用程序中修复了重定向位,我正在一个新窗口中打开linkedin的登录表单,当整个过程完成后,我将数据发送到主窗口。谢谢,@dbeja。不幸的是,我仍然无法登录,尽管至少现在错误有所不同。我现在有
[未经授权]。过期的访问令牌。时间戳:1451220123987
(401)。时间戳似乎是从2015年开始的。我不认为访问令牌是(或应该是)旧的,因为每次我重新加载页面时,我都会得到一个新的,expires字段是1800(我认为是秒,所以30分钟?),但即使如此,我总是得到这个响应。有什么想法吗?修好了!当我在.init(…)中调用
我正在传递
authorize:true
。我认为它使用了一些旧的cookie或类似的东西(奇怪的是,每个请求的访问令牌都不同)。我删除了这个字段,它工作了。谢谢@dbeja!你有没有找到克服这一切的方法?我有完全相同的问题。@justADreamer看到我标记为已接受的答案(来自@dbeja)。而不是调用
https://api.linkedin.com/v1/people/~[…]?oauth2\u access\u token=[token]&format=json
,我现在称之为在头中传递oauth token
https://api.linkedin.com/v1/people/~[…]?format=json
+
标题{'oauth_token':[token]}
。是的。但我仍然需要以某种方式获取访问令牌,因为我的后端严重依赖于使用长寿命的访问令牌:-我认为我没有办法将oauth令牌与访问令牌交换。@JustAddresser在我的情况下,我只使用令牌检索用户数据(尤其是id和电子邮件),因为这些是重要的数据,不应该直接从前端传递。在我的用例中,我不需要长寿命令牌,而且我也没有使用过它们(除非我在不知道它们是长寿命的:P的情况下使用),所以我真的无法帮助您。