【问题标题】:How to make a Linkedin Rest API request the Node way (without the JS SDK)?如何使 Linkedin Rest API 以 Node 方式请求(没有 JS SDK)?
【发布时间】:2015-10-11 07:18:31
【问题描述】:

我正在使用 Node (v0.12.4) + Express (v4.0.0) + PassportJS(v0.1.17) 通过 LinkedIn (OAuth2) 对用户进行身份验证。

我正在按照本教程中的步骤进行操作: https://developer.linkedin.com/docs/oauth2

我能够对用户进行身份验证并将他的信息与 LinkedIn 提供的身份验证令牌一起保存到我的数据库中。

我的问题:如何使用令牌向 API 发出请求?我被困在给定教程的第 4 步。

例如,我将如何拨打下面的电话(摘自上面的教程)?

示例调用

GET /v1/people/~ HTTP/1.1
Host: api.linkedin.com
Connection: Keep-Alive
Authorization: Bearer AQXdSP_W41_UPs5ioT_t8HESyODB4FqbkJ8LrV_5mff4gPODzOYR

看起来很简单,但是作为一个节点初学者,我已经苦苦挣扎了太久了。

===================

编辑: 按照 Ted Avery 的建议,我尝试了request module,结果是这样的:

// LinkedIn API route
app.get('/linkedin/people', function(req,res){
    request.get('http://api.linkedin.com/v1/people/~', {
        'host': 'api.linkedin.com',
        'connection': 'Keep-Alive'
        'auth': {
            'bearer': req.user.linkedin.token
        }
    }, function(error,apiRes,body){
        res.send(apiRes);
    });
});

我收到以下回复 (apiRes):

{
"statusCode":401

"body":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<error>\n  <status>401</status>\n  <timestamp>1437750879622</timestamp>\n  <request-id>AKM2GX6BFE</request-id>\n  <error-code>0</error-code>\n  <message>ssl required</message>\n</error>\n",

"headers":{
    "server":"Apache-Coyote/1.1",
    "x-li-request-id":"AKM2GX6BFE",
    "date":"Fri, 24 Jul 2015 15:14:38 GMT",
    "vary":"*",
    "x-li-format":"xml",
    "content-type":"text/xml;charset=UTF-8",
    "content-length":"236",
    "x-li-fabric":"prod-ltx1",
    "x-li-pop":"prod-ltx1",
    "x-li-uuid":"zoW/s87q8xNQnsleUCsAAA==",
    "set-cookie":["lidc=\"b=TB60:g=105:u=27:i=1437750879:t=1437833236:s=AQFNZrhu0_0QIvH-rUkU4ElJ8Ytm_dKV\"; Expires=Sat, 25 Jul 2015 14:07:16 GMT; domain=.linkedin.com; Path=/"]
    },

"request":{
    "uri":{
        "protocol":"http:",
        "slashes":true,
        "auth":null,
        "host":"api.linkedin.com",
        "port":80,
        "hostname":"api.linkedin.com",
        "hash":null,
        "search":null,
        "query":null,
        "pathname":"/v1/people/~",
        "path":"/v1/people/~",
        "href":"http://api.linkedin.com/v1/people/~"
        },
    "method":"GET",
    "headers":{
        "authorization":"Bearer AQVYLfCs5lpbUlFdGeKXdR3z-3IiuO2N-PdJ7wgEtD_2doyxcy--mUxCN-GCJm-CaRXa-j7OF646enu_V5cp8jbiuMPesqKjWLcDdMmy8PSbEXS6Mw2iVznVF0Mk0iSAm419XlB7uMFwX0iAC71a_kjk_hZmvc90PmT471MLButnQmo3ww0"
        }
    }
}

我知道linkedin-passport 身份验证过程没问题,因为我在我的数据库中获取了用户名、电子邮件和令牌。问题是,由于某种原因,使用此令牌我总是得到未经授权的 401。对此有什么想法吗?

【问题讨论】:

    标签: node.js api express linkedin passport.js


    【解决方案1】:

    request 库极大地简化了 Node 中的任何 REST,所以我建议这样做。文档中有一些您想要的示例。抱歉,我知道最好有一个代码示例,但我已经有一段时间没有使用这个 lib 进行项目了。

    【讨论】:

      【解决方案2】:

      您用于访问 LinkedIn 的护照库可能仍在请求更多默认范围成员权限,现在允许(根据 2 月发生的 LinkedIn api 更改)。我建议您确保在设置护照呼叫时请求的范围仅限于基本的r_basicprofile 成员权限,然后从那里开始。

      IIRC,它过去默认要求r_fullprofile,这对公众不再可用,这会导致在新的公开可用权限集下尝试进行身份验证时出错。

      【讨论】:

        【解决方案3】:

        我知道你很久以前就问过这个问题,但我有一个答案,它可能对其他人有所帮助。

        将“auth”替换为'Authorization'

        // LinkedIn API route
        app.get('/linkedin/people', function(req,res){
            request.get('http://api.linkedin.com/v1/people/~', {
                'host': 'api.linkedin.com',
                'connection': 'Keep-Alive'
                'Authorization': { // <------- Replace this
                    'bearer': req.user.linkedin.token
                }
            }, function(error,apiRes,body){
                res.send(apiRes);
            });
        });
        

        另请阅读:https://developer.linkedin.com/docs/oauth2#hero-par_longformtext_3_longform-text-content-par_resourceparagraph_3

        您需要将 state=ThisIsRandomBlaBlaDCEeFWf45A53sdfKef424 添加为 param

        当您向 https://www.linkedin.com/oauth/v2/authorization

        发出 GET 请求时

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-08
          • 1970-01-01
          • 1970-01-01
          • 2019-02-24
          • 1970-01-01
          • 2019-06-30
          • 1970-01-01
          相关资源
          最近更新 更多