2011-02-18 122 views
3

我正在處理所有用戶身份驗證發生在ColdFusion應用程序(基於CFWheels)的應用程序,但與文件服務器的交互發生在Node.js應用程序中。我需要確保在CF應用程序上登錄的用戶被允許訪問節點服務器中的文件。我正在考慮設置一個CFToken或節點服務器可以讀取並傳遞給ColdFusion的一個cookie,詢問「嘿,這個令牌是否可以訪問此文件」跨平臺登錄

我唯一的問題是我不確定CFTokens是否最終重新使用,如果他們是我應該用什麼來代替?

如果其他人有其他方式做這種事情,其中​​身份驗證需要跨多個引擎可重用,我很想聽聽你的策略。

回答

4

這聽起來像是一個很好的方法來做到這一點。

但是,我只是使用CFCOOKIE來設置您自己設計的cookie。

這兩臺服務器必須共享一個域名,當然要能夠讀取同一個cookie。您還必須將Cookie設置爲域cookie。

構建這個方法的一個簡潔方法是創建一個專門用於安全性的整體CFC。

它會產生和驗證登錄令牌的方法。

你的CF應用程序將使用它來生成令牌,你可以使用

http://server.com/path/security.cfc?method=validateToken&token=whatever 

一種更有效的方式來做到這一點有你的Node.js應用程序調用此通過Web服務,假設他們有訪問相同的數據存儲,將使用相同的算法在兩個系統中生成/解碼(如果需要)令牌,並讓node.js應用直接訪問數據存儲。

當我需要這樣做時,我們在mongodb中存儲了「會話」令牌,並從每個應用程序(CF,Java和Rails)直接訪問數據存儲區。 CF系統負責初始認證。另外兩個系統沒有進行身份驗證,只驗證了令牌,如果沒有找到/無效/等,則以適當的方式進行響應。

+0

這聽起來很合理。我們的主數據庫是MySQL,但我可能會使用MongoDB來存儲當前登錄名,只是會話令牌和用戶標識。這樣我就擁有了MySQL的強大功能,以及MongoDB的敏捷性。 – 2011-02-18 16:28:58

0

葉,你想讀的是SSO(單點登錄)。

OpenID是一種流行的OpenID,可與多種平臺(包括CF)一起使用。

如果你覺得冒險......有點小心,可以很容易地設計自己的共享登錄的機制 - 通常通過Cookie或頭共享某個令牌,或者也可以通過RESTfull(或任何)的web服務調用形式。

+0

對不起,我從CF角度不確定(暫時沒有使用CF),但是我對SSO瞭解很多,並且已經使用所描述的方法在各種平臺上集成了許多站點。 – Brian 2011-02-18 15:50:50