2015-05-20 57 views
1

我正在使用位於https://developer-programs.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens的文章將我的Javascript訪問令牌交換爲REST OAuth令牌。問題交換LInkedIn javascript令牌以休眠oauth令牌

按照這裏的指示後,無論我看起來如何做,我只會得到一個400錯誤請求迴應。

我用於Facebook並希望與LinkedIn重新創建的流程是;前端向LinkedIn進行身份驗證並將訪問令牌傳遞給我的API,然後API獲取所有必要的用戶信息,並將我自己的不記名令牌傳遞迴客戶端,等等。

不幸的是,LinkedIn並沒有很好地使用它,我需要將我的令牌從它的JavaScript令牌轉換爲OAuth令牌。

我通過cookie的LinkedIn給我我的API,它看起來像下面的(其中OAuthBase爲http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs

access_token: "oxmKI9aU4RCfksdegZ3obZGHK-vo6Q4-4FSQk" 
member_id: "AmjWCF7ExN" 
signature: "t8KEbLjJ+r6uM42tUwfJm5yWp70=" 
signature_method: "HMAC-SHA1" 
signature_order: ["access_token","member_id"] 
signature_version: "1" 

然後我在嘗試撥打電話,以https://api.linkedin.com/uas/oauth/accessToken做實際的交流。我的代碼是這樣的:

public async Task<IHttpActionResult> ConvertLinkedInToken(LinkedInCovertTokenObject val) 
    { 
     string normalizeduri; 
     string normalizedparams;    

     OAuthBase o = new OAuthBase(); 
     string signature = o.GenerateSignature(new Uri("https://api.linkedin.com/uas/oauth/accessToken"), Startup.linkedInAuthOptions.ClientId, Startup.linkedInAuthOptions.ClientSecret, val.access_token, null, "POST", o.GenerateTimeStamp(), o.GenerateNonce(), out normalizeduri, out normalizedparams); 

     var client = new HttpClient(); 
     var uri = new Uri("https://api.linkedin.com/uas/oauth/accessToken?" + 
      "oauth_consumer_key=" + Startup.linkedInAuthOptions.ClientId + 
      "&xoauth_oauth2_access_token=" + val.access_token + 
      "&signature_method=HMAC-SHA1" + 
      "&signature=" + signature 
     ); 

     var response = await client.GetAsync(uri); 

     return Ok(); 
    } 

不管我怎麼玩都是從LinkedIn回來的是一個400錯誤的請求,沒有任何其他有用的信息。

1)我如何轉換LinkedIn JS令牌休息OAuth憑證在我的C#API

回答

1

您正在尋找從LinkedIn舊文檔。從5月12日開始,LinkedIn已經開始在他們的API中推出新的更改,其中包括認證。據我所知,LinkedIn不再使用OAuth,今後您需要OAuth2.0進行身份驗證。您應該檢查此鏈接瞭解更多信息: https://developer.linkedin.com/docs/signin-with-linkedin

+0

謝謝@Indraneel我認爲你是對的。這真是一個遺憾,因爲他們的Javascript API提供的令牌非常易於使用......但它們不適用於其REST API –

+0

沒問題。您能否請您將答案標記爲已接受,以防它對您有所幫助。 :) –

3

我這是怎麼實現的是:

在前端:

IN.User.authorize(function(){ 
    // here you can find oauth token 
    var oauth_token = IN.ENV.auth.oauth_token; 
    // send this token to your API endpoint 
}); 

在您的API(捲曲例子),當然有替代的oauth_token令牌在前端收到。

curl -X GET \ 
    'https://api.linkedin.com/v1/people/~: 
(id,firstName,lastName,siteStandardProfileRequest,picture-url,email- 
address)?format=json' \ 
    -H 'oauth_token: OAUTH_TOKEN' 
+0

這是記錄在任何地方?它解決了我的問題,但是我一直沒有找到任何有關如何使用'oauth_token'而不是'access_token'來完成的文檔。 – WillyC