SSO實現技術準備

肖菁 軟件工程師, 湖南省長沙鐵道學院科創計算機系統集成有限公司軟件

2003 年 8 月 01 日

本文中作者給大家詳細地解釋了SSO的基本原理以及WebSphere中的SSO實現機制

SSO(Single Sign-On)直譯爲一次登錄,SSO的機制就是在企業網絡用戶訪問企業網站時作一次身份認證,隨後就可以對所有被授權的網絡資源進行無縫的訪問,SSO 可以提高網絡用戶的工作效率,降低了系統出錯的機率,但是比較難於實現。本文中作者給大家詳細地解釋了SSO的基本原理以及WebSphere中的SSO實現機制。

1 SSO簡介

SSO(Single Sign-On)直譯爲一次登錄,WebSphere中更加形象的解釋是"單點登錄、全網漫遊",意思就是說所有已相同的DNS域名結尾的機器,可以共享用戶的認證信息,比如:a.chinacreator.com,b.chinacreator.com就可以經過配置後實現SSO.

SSO的機制就是在企業網絡用戶訪問企業網站時作一次身份認證,隨後就可以對所有被授權的網絡資源進行無縫的訪問,而不需要多次輸入自己的認證信息。

SSO 可以提高網絡用戶的工作效率,降低網絡操作的費用,並提高網絡的安全性,而且降低了系統出錯的機率,但是比較難於實現。

 

1.1 以前的用戶登錄模式

爲了實現企業的信息化、電子商務和其他需求,越來越多的信息系統在網上出現,這些企業的網絡用戶和系統管理員不得不面對這個現實:

1. 用戶需要使用其中的任何一個企業應用的時候都需要做一次身份認證,而且每一次認證使用的認證信息(用戶民和密碼)不能保證一致;

2. 系統管理員需要對每一個系統設置一種單獨的安全策略,而且需要爲每個系統中的用戶單獨授權以保證他們不能訪問他們沒有被授權訪問的網絡資源。


圖1 :目前使用的多點登錄的示意圖
圖1 :目前使用的多點登錄的示意圖

 

1.2 SSO登錄模式

以前使用的登錄系統中,需要給每一臺機器上的系統,甚至是每臺機器上的每個應用準備一套用戶管理系統和系統用戶授權策略,考慮到互操作的可操作性和安全問題,SSO將一個企業內部所有域中的用戶登錄和用戶帳號管理集中到一起,SSO的好處顯而易見:

1. 減少用戶在不同系統中登錄耗費的時間,減少用戶登錄出錯的可能性

2. 實現安全的同時避免了處理和保存多套系統用戶的認證信息

3. 減少了系統管理員增加、刪除用戶和修改用戶權限的時間

4. 增加了安全性:系統管理員有了更好的方法管理用戶,包括可以通過直接禁止和刪除用戶來取消該用戶對所有系統資源的訪問權限


圖2:SSO的認證示意圖
圖2:SSO的認證示意圖 

2 SSO理論基礎

SSO並不是J2EE中的標準實現,而是各家中間件提供商在提供J2EE應用服務器集羣時提供的一種認證信息共享的機制,所以各家廠商提供的實現方式不一樣,IBM的WebSphere是通過cookies記錄認證信息,BEA的WebLogic通過session共享技術實現認證信息的共享,國內深圳金蝶的apusic採用的和BEA的技術基本一致。

但是不管各家的實現技術怎麼樣,他們的理論基礎都緣於J2EE中的安全技術:Java Authorization Contract for Containers (Java ACC)和JavaTM Authentication and Authorization Service(JAAS)。Java Authorization Contract for Containers (Java ACC)和JavaTM Authentication and Authorization Service(JAAS)是j2ee技術中實現安全訪問機制的規範和標準,其中Java ACC屬於j2ee規範的一部分,而JAAS是Java ACC的實現部分。

 

2.1 Java ACC

Java ACC規範定義了授權策略模塊和J2EE容器之間的實現規範,這樣容器安全提供者就可以根據操作環境的要求提供J2EE容器的授權功能。

Java ACC規範分爲三個部分,分別是:提供着配置規範,安全策略配置規範,策略判斷和執行規範。這三個部分組合在一起共同描述了授權提供者的安裝和配置,J2EE容器使用者可以根據這些規範來實現訪問控制。

1. 安全提供者配置規範規定了對安全提供者和容器的要求,這些是安全策略提供者和容器之間整合的基礎。

2. 安全策略配置規範定義了容器配置工具和安全提供者之間的交互規範,所謂的交互是指如何將聲明的授權策略信息轉化爲J2SE策略提供者可以識別的指令的過程。

3. 策略判斷和執行規範定義了容器策略執行點和安全提供者之間的交互,他實現了J2EE容器需要的安全策略判斷。

大家可以到 http://java.sun.com/j2ee/javaacc/下載規範文檔。

 

2.2 JAAS

JAAS全名是JAVA認證和授權服務,它是一組java包,爲提供基於用戶的認證和訪問控制提供支持,它是標準可嵌入式認證模型(PAM)的java版本實現,支持基於用戶的身份認證。

JAAS是J2SE1.3中的可選包,但是J2SE1.4中已經集成了JAAS.

標準可嵌入式認證模型(PAM)的具體內容大家可以查看 http://java.sun.com/security/jaas/doc/pam.html,JSSA的規範大家可以到 http://java.sun.com/products/jaas/查看。

 

3 WebSphere中的SSO

3.1 WebSphere中的SSO

SSO在IBM的產品中得到了完全的體現,包括在WebSphere集羣中,在WebSphere和Domino的集成中,都可以實現。

SSO允許網絡用戶在訪問多個WebSphere域的多個應用時只要向其中的某一個WebSphere應用服務器進行認證,就可以訪問其他WebSphere域中的各種資源,包括HTML頁面,JSP文件,Servlet和企業EJB,也可以訪問其他Domino中的文檔,而不需要登錄多個WebSphere域。

WebSphere中默認不支持SSO,如果需要實現SSO,需要對每一臺WebSphere服務器進行配置,如果需要實現WebSphere和Domino之間的SSO,則對WebSphere和 Domino 都要重新配置。

 

3.2 前提條件

要實現WebSphere服務器之間的SSO,必須滿足以下前提條件:

1. 所有的服務器必須配置成同一個DNS域的一部分。

比如: DNS域配置爲mydomain.com,那麼,SSO將在所有Domino和WebSphere服務器起作用,只要他在屬於這個DNS域的某個主機上,比如說在a.mydomain.com和b.mydomain.com的主機上配置的兩臺webpshere服務器之間。

2. 所有服務器必須共享用戶註冊表,用戶註冊表可以是LDAP數據庫,在WebSphere服務器之間實現SSO還可以採用用戶自己實現的用戶註冊表,但是Domino不支持用戶自己實現的用戶註冊表,所以WebSphere和Domino之間實現SSO時只能採用LDAP數據庫作爲公有的用戶註冊表。

[注] 使用的LDAP數據庫必須是WebSphere支持的LDAP數據庫,推薦使用IBM的Security Way.

3. 所有的用戶定義在一個單一的LDAP目錄中。

4. 用戶的瀏覽器必須支持Cookies,因爲服務器生成的信息將通過Cookies傳遞到客戶端,然後會提交給用戶訪問的其他服務器進行認證。

5. WebSphere應該是3.5版本或者以上版本。

 

3.3 SSO授權機制

WebSphere中的SSO授權機制比較簡單,採用了類似於windows文件的權限管理的機制,就是先定義一些角色,然後給這些角色授予訪問某些服務器資源的權限,然後再將這些角色映射到具體的用戶或者用戶組。

比如:我們開發了一個WebSphere服務器上的web應用,這個應用的管理員可以使用這個web應用的管理權限,和管理權限相關的文件都放在這個應用的/admin目錄下,那麼我們就可以給這個應用增加一個admin的角色,它可以訪問/admin目錄下的所有文件,然後把這個admin角色映射到所有管理員角色所在的LDAP數據庫中的某個組,如圖所示:


 

4 LDAP數據庫簡介

LDAP的英文全稱是Lightweight Directory Access Protocol,一般都簡稱爲LDAP。它是基於X.500標準的,與X.500不同的是,LDAP支持TCP/IP。LDAP 標準的規範是以一系列 RFC(或註釋請求,Request For Comment)的形式編排的。有關與 LDAP 相關的 RFC 的更多信息,可以參考 http://www.ldapman.org/ldap_rfcs.html

LDAP中的信息都被存儲在目錄中,LDAP不是關係型數據庫,它的信息目錄結構類似於UNIX的文件系統,這種樹-葉結構的結構使LDAP有很好的擴充性,而且查詢速度比關係型數據庫要快。

大多數的LDAP服務器都爲讀密集型的操作進行專門的優化,也就是說如果你的應用中信息讀取操作很多,而修改信息很少的話,那麼您可以採用LDAP數據庫。從LDAP服務器中讀取數據的時候會比從專門爲 OLTP優化的關係型數據庫中讀取數據快一個數量級。

因爲專門爲讀的性能進行優化,大多數的LDAP目錄服務器 並不適合存儲需要需要經常改變的數據。例如,可以用LDAP服務器來存儲公司的組織機構和員工信息,但是LDAP一般不適合作爲 電子商務站點的數據庫服務器。

 

參考資料

1. sun 的Java ACC規範 http://java.sun.com/j2ee/javaacc/

2. sun 的 JAAS規範 http://java.sun.com/products/jaas/

3. opengroup 的安全實現部分 http://www.opengroup.org/security/

4. IBM WebSphere文檔中心安全部分 http://www-3.ibm.com/software/webservers/appserv/doc/v40/ae/infocenter/was/pdf/nav_Securityguide.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章