2012-05-25 79 views
4

我想了解「使用LinkedIn登錄」。我似乎只是抓住了一部分的圖片。正確使用「使用LinkedIn登錄」來識別我的網站上的用戶?

據我所知,用戶在我的網站上登錄LinkedIn,LinkedIn將一個唯一的用戶標識符返回給我的網站。

不知何故,我然後在我的網站上使用該標識符來標識用戶。

但我不明白 - 一旦最終用戶看到了標識符,什麼是阻止他們直接使用,並且從未再次通過LinkedIn登錄?返回的用戶ID必須保密,還是可以公開顯示,例如在URL中?

此外,什麼是防止某人找到其他人的用戶名,然後用它來訪問我的網站?

好像我錯過了關於如何使用從LinkedIn返回的用戶ID的理解的整個板塊,以及哪些問題與安全有關。

有人可以解釋一下嗎?

感謝

回答

3

我會自己回答。事實證明,您可以選擇要求LinkedIn API返回包含簽名的Cookie。通過連接的HTTPS將此cookie返回到您的後端服務器,您可以根據自己的API密鑰驗證簽名。瞧 - 你已經證明,這是一個有效的用戶,你已經證明,用戶登錄實際上來自LinkedIn而不是被欺騙。

1

當用戶通過LinkedIn登錄,他們的API將返回到你自己的用戶ID。這真的不是祕密,它只是告訴你,你的網站上的用戶已經以該用戶的身份登錄,並擁有該唯一標識符。只有知道他們的linkedin ID,您才能以其他用戶身份登錄 - 對於linkedin的API返回該ID,您網站上的用戶必須使用用戶名和密碼登錄linkedin。

只要你確定你正在訪問的API確實是linkedin的,並且響應沒有被攔截/修改/僞造,你可以相信這個API返回的ID是一個正確的ID用戶在他們的網站上,並且他們已經以該用戶的身份登錄和認證。

基本上,如果您始終使用linkedin的API對linkedin用戶進行身份驗證,並且沒有在您的網站上提供「輸入您的linkedin ID進行身份驗證」的提示,那麼您很安全。即使用戶知道其他用戶的ID,他們仍需要他們的linkedin用戶名/密碼才能將API返回給您。

是否隨意存儲返回的ID以跟蹤用戶偏好/操作。你甚至可以將它與已經存在於數據庫中的用戶相關聯,並給予用戶使用數據庫中存儲的用戶名/密碼組合(希望有鹽漬/散列)或通過其中一個oauth選項登錄的選項。

希望這有助於清理事情!

EDITED BASED簡評關於你如何處理事情的API請求後強調

的另一點。你可以相信由linkedin返回的ID是正確的,但在此之後,你還必須能夠相信存儲在你的網站上的ID仍然是你從linkedin獲得的相同內容。使用用戶無法編輯的服務器端來存儲此ID(如PHP會話 - 不是url參數)。

+0

對不起,我還沒有真正得到它。因此,如果我想使用LinkedIn登錄我的新網站,請按照說明操作並添加「使用LinkedIn登錄」功能。用戶登錄後,我的網頁將保存其用戶標識。我將這個用戶ID包含到我的服務器的每個請求中。在我網站的後端,我在每個入站請求上檢查這個用戶ID。沒有用戶標識的請求未登錄,因此被拒絕。請確保擁有我可以信任的登錄用戶標識,並且在我的數據庫查詢中使用該用戶標識來限制訪問。正確? –

+0

基本上,您所說的所有內容都是準確的,除了「如何在每個入站請求中包含此ID」的詳細信息。您可以相信linkedin的ID是正確的,但在此之後,您還必須能夠相信存儲在您網站上的ID仍然是您從linkedin獲得的相同內容。使用用戶無法編輯的服務器端來存儲此ID(如PHP會話),並且您很好! 如果用戶知道他們的linkedin ID(或其他人的確是 - 他們可以直接從linkedin獲得這些信息),但是他們不能被允許改變它。 – rawb

+0

那麼我們需要保密LinkedIn登錄後提供的用戶ID嗎?例如,根據用戶ID創建一個URL是一個不好的主意,例如www.example.org/(linkedinuserid)這會使任何人都可以使用linkedinuserid登錄到我們的應用程序嗎? –

0

假設用戶通過linkedin認證成功後,
它重定向到您的頁面http://www.xyz.com/redirect.php

現在,您有重定向的代碼。PHP從URL獲取oauth參數並調用用戶標識。

function getUserID(){ 
    // code which takes oauth params and calls linked in api with access token 
    //and returns userId of user 
    return userID; 
} 

$userID = getUserID(); 

現在,因爲你有$userID,與$userID創建一個會話並重定向用戶到他/她的主頁。檢查主頁中的會話,如果設置會話$userID,讓用戶打開頁面,如果會話不可用,請不要顯示頁面並告訴他們先登錄。

現在你的問題,你認爲在這種方法中,用戶可以通過他/她自己輸入userID