2015-07-21 28 views
3

我使用Node(v0.12.4)+ Express(v4.0.0)+ PassportJS(v0.1.17)通過LinkedIn(OAuth2)驗證用戶身份。如何使一個Linkedin Rest API請求Node方式(沒有JS SDK)?

我下面的步驟從本教程: 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 

似乎很容易,但作爲一個節點初學者,我已經與它掙扎太久。

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

編輯: 繼泰德艾利的建議,我嘗試了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護照AUT h進程是好的,因爲我在我的數據庫中獲取用戶名,電子郵件和令牌。問題是,憑藉此令牌,出於某種原因,我總是獲得401未經授權的許可。對此有何想法?

回答

1

節點中的任何REST都是用request庫極大地簡化的,所以我建議這樣做。在文檔中有一些您需要的示例。對不起,我知道一個代碼示例是最好的,但是因爲我已經用這個lib工作過一段時間了。

0

您用於訪問LinkedIn的護照庫可能仍然在請求更多默認的作用域成員權限(根據2月份發佈的LinkedIn api更改)。我建議您確保您在設置護照呼叫時所請求的範圍僅限於基本的r_basicprofile成員許可權,以開始並從那裏開始。

IIRC,默認情況下它用於請求r_fullprofile,這已不再適用於普通大衆,這會在嘗試使用新的公開可用權限集進行身份驗證時導致錯誤。

0

我知道你很久以前問過這個問題了,但我有一個答案,它可能會幫助其他人。

與替換 '權威性' '授權'

// 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

時你做GET要求到https://www.linkedin.com/oauth/v2/authorization