簡體   English   中英

使用Spring Social for Linkedin將LinkedIn JS API令牌交換為REST令牌

[英]LinkedIn JS API token exchange to REST token using Spring Social for Linkedin

我正在嘗試執行以下操作:

讓用戶使用Linkedin JSAPI通過Linkedin進行身份驗證和授權,然后獲取身份驗證詳細信息並將其發送到我的服務器以通過服務器端通信獲取用戶配置文件。

我得到了LinkedIn按鈕設置,得到了授權cookie一路到我的服務器(如描述在這里 ),並能夠驗證令牌確實與我的秘密密鑰正確簽名。

現在我停留在我應該從JSAPI獲取的令牌並將其交換為訪問令牌的位置。

這是我正在使用的代碼,如上所述它使用Spring Social for Linkedin,它不起作用,因為它拋出401 Unauthorized響應:

    LinkedInConnectionFactory connectionFactory = 
            new LinkedInConnectionFactory(myLinkedinId, myLinkedinSecret);
    OAuth1Operations oauthOperations = connectionFactory.getOAuthOperations();
    AuthorizedRequestToken art = new AuthorizedRequestToken(new OAuthToken(codeIGotFromJSAPI, aSecretKey), whereDoIGetThisSignature);
    OAuthToken accessGrant = oauthOperations.exchangeForAccessToken(art, null);
    if (accessGrant == null) return null;
    Connection<LinkedIn> connection = connectionFactory.createConnection(accessGrant);
    if (connection != null) {
        LinkedIn linkedin = connection.getApi();
        return linkedin.profileOperations().getUserProfile();
    }

我真正感到困惑的是AuthorizedRequestToken對象。 我認為codeIGotFromJSAPI部分很簡單,它只是access_token,但是aSecretKey ,它只是我的linkedin密鑰嗎? 怎么樣的doDoIGetThisSignature,我該如何創建那個? 我是否使用與用於驗證linkedin響應相同的哈希方法,並使用我的秘密linkedin密鑰對access_token進行哈希處理? 在linkedin頁面中,它說:

您需要傳遞四個值作為查詢參數:

  1. oauth_consumer_key,以表明自己
  2. xoauth_oauth2_access_token參數,設置為cookie中access_token字段的值。
  3. signature_method設置為HMAC-SHA1
  4. 簽名,按照OAuth 1.0a規范中的描述計算

所以(1)是由我想的連接自動完成的,(2)是我提供的訪問令牌,但我該怎么做(3)和(4)?

讓我們假設我在Linkedin設置的JSAPI cookie中獲得以下數據:

{
 "signature_method":"HMAC-SHA1",
 "signature_order": ["access_token", "member_id"],
 "access_token":"AD2dpVe1tOclAsNYsCri4nOatfstw7ZnMzWP",
 "signature":"73f948524c6d1c07b5c554f6fc62d824eac68fee",
 "member_id":"vvUNSej47H"
 "signature_version": 1
}

我需要做什么才能完成下一步?

使用以下過程:

  • 閱讀cookie
  • 轉換"signature":"..."改為&signature=...
  • "signature_method":"HMAC-SHA1"&signature_method=HMAC-SHA1
  • "member_id":"..."&oauth_customer_key=...
  • "access_token":"..."&xoauth_oauth2_access_token=...
  • 將所有內容附加到LinkedIn網址加上?

根據Spring論壇關於該主題的討論 ,Spring Social目前不支持用於REST API OAuth令牌的Exchange JSAPI令牌中描述的LinkedIn JSAPI令牌交換。

但是,如果沒有Spring Social,可以使用可用於Java的標准OAuth庫來實現解決此任務的實現。 您從交換機獲得的LinkedIn用戶訪問令牌可以放入新的AccessGrant對象中,該對象可用於在用戶的ConnectionRepository創建Spring Social Connection<?>

LinkedIn開發者論壇討論中發布的代碼顯示了如何使用Scribe執行交換。 必須發送到LinkedIn的請求是標准OAuth請求,但必須從JSAPI令牌對象發送access_token字段作為HTTP查詢參數xoauth_oauth2_access_token 您也可以使用的member_id僅供您參考, signature允許您在不查詢LinkedIn的情況下驗證access_tokenmember_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM