我有以下无法更改的解决方案。它以这种方式与Google和Facebook配合使用:在前端用户使用Google或Fb登录并接收访问令牌(不使用回调)。然后将令牌传递到后端服务器,并通过护照进行验证。示例:
对于FB:
while(mysqli_stmt_fetch($stmt)) {
$data[] = array('bdi' => $bdi, 'date' => $date);
}
,对于Google:
router.post(
'/auth/facebook',
passport.authenticate('facebook-token', {session: false}),
nextMiddleware
);
很遗憾,此解决方案不适用于LinkedIn。如果在请求正文中同时传递了FB和Google访问令牌,则我假设护照解析提供的JWT令牌并从中提取所有信息。
我正在为LinkedIn尝试相同的解决方案:
router.post('/auth/google',
passport.authenticate('google-id-token'),
nextMiddleware
);
问题在于护照中间件始终返回401未经授权。如何将访问令牌传递给此端点?我将令牌作为请求正文传递,与FB和Google中相同,但不起作用。 第二个问题是我无法解码LinkedIn令牌。它不是Google或FB中的JWT令牌,我可以解码并获取有关用户的信息。这是什么样的代币?如何使用它来获取有关用户的信息?我尝试了https://api.linkedin.com/v1/people/~?oauth2_access_token= {TOKEN}和https://api.linkedin.com/v1/companies?format=json&is-company-admin=true&oauth2_access_token= {TOKEN},但总是收到“无效的访问令牌”响应。
请注意,我无法更改其工作方式。前端从社交网站获取访问令牌,然后将该令牌发送到后端,以接收后端服务器发出的JWT。