2011-03-16 122 views
0

在我們system,我們現在使用與Java小程序的客戶端的架構(嵌入在HTML啞頁)和Java服務器,通過套接字(通過SSL)進行通信。帶Java applet的單點登錄(OpenID,OAuth等)?

用戶必須登錄到使用用戶名和密碼(希望不共享)的系統 - 然後將密碼存儲在散列形式在我們的數據庫。

最近讀過Jeff的Your Internet Driver's License,我想讓我們的用戶可以使用其他機制(如OpenID)登錄,因此他們不必記住用戶名和密碼,但我們仍然知道用戶是同一個登錄的用戶一天前從另一臺電腦。

據我瞭解,OpenID的工作原理是利用瀏覽器重定向一些服務器端加密相結合。這看起來像是複雜的(如果不是不可能的話),與我們的applet(或applet與非HTTP服務器結合,真的)結合起來,它應該允許在這裏登錄。

OAuth的任一使用了類似的機構,或提供給用戶的一些令牌,其中用戶然後將輸入到我的小程序。 applet必須在客戶端存儲這個令牌(每個JNLP PersistenceService或類似的)以允許重複登錄,但這意味着每臺計算機都要獲得一個新的令牌,不容易讓多個用戶共享一臺計算機(帳戶),並且不是很簡化登錄。

是否可能用在這裏在這裏啓用單點登錄系統,還有其他的方式,或者這根本就不可能沒有至少得到一些HTTP服務器端代碼的憑據傳遞給我們的小程序?

回答

0

可以使用的OpenID登錄用戶,小程序外,使用OpenId libraries之一。這將是正常的流程,包括服務器端進程和用戶重定向到OpenId提供商的頁面。然後你通過用戶ID小程序:

<object codetype="application/java" ...> 
    <param name="user" value="myOpenId"> 
</object> 

然後你就可以鑑定this.getParameter("user")的用戶。

+0

這實際上可以讓任何人使用任何OpenID(只需要在本地修改HTML代碼),如果我理解正確的話。我不認爲這是一個安全的實施。這需要我的網絡服務器至少簽署一些簽名,以向小程序(及其服務器)確認OpenID認證成功。 – 2011-03-16 20:05:28

+0

你是對的,你可以對參數進行編碼,或者傳遞一個由你的服務器產生並指向用戶的密鑰。 – olivierlemasle 2011-03-22 16:03:36