單點登入原理與技術實現比較

zhengwenping發表於2018-11-15

1.1    單點登入原理與技術實現 比較

1.1 .1   單點登入原理

單點登入 SSO 是指一個使用者身份只需進行一次鑑權便可以訪問所有經授權的資源,而不需要多次認證。 SSO 機制能夠減少人為錯誤,同時提高整個系統的安全性。雖然 SSO 很有價值,但是它的實現並不容易,因為到目前為止還沒有一種使用者身份驗證的統一標準。 IBM WebSphere  Portal 伺服器提供了各種手段使 SSO 的實現簡單化、安全化、有效化。

通常會有 外接代理和內建代理兩種方法。

1 .外接代理

在有些情況下,可以使用一種類似中介的代理程式,該程式處於使用者和應用程式之間,如圖 1- 1 所示。當使用者被應用程式要求提供身份證明時,代理程式從使用者資料庫中得到使用者的信用狀,並送給應用程式。信用狀相當於一個令牌,它只有使用者的身份資訊,而沒有使用者的密碼憑證。換句話說,使用外接代理實現單點登入,被整合的 Web 應用系統是不再驗證該使用者在 Web 應用系統中的密碼的。它認為,只要你是 Portal 的合法使用者並且成功登入了 Portal ,你只需告訴我你的身份跟角色,我就認為你是該 Web 系統中可以使用授權資訊的合法使用者了。

1- 1   門戶伺服器進行身份驗證過程 Web 應用沒有提供 Authentication API 的情況

 ① 使用者登入到門戶伺服器,身份驗證服務對使用者進行身份驗證。

  驗證透過,建立使用者信用狀,並請求建立使用者預設桌面。

  理程式使用使用者信用狀,併傳送請求給目錄服務,要求得到 Web 應用的使用者名稱和口令。

  得到使用者名稱和許可權資訊。

  代理程式使用它們進入 Web 應用並依據許可權資訊得到應用資料。

  代理程式將得到的資料格式化後生成使用者預設桌面,應用程式的內容以門戶 Channel 的形式展現。

  將生成的桌面傳送給使用者。

上面的情況適用於 Web 應用沒有提供 Authentication API 的情況,對於提供 Authentication API Web 應用(如 Lotus Notes ),則多出來一步,即第 4 步:鑑權。使用者在 Web 應用中的使用者名稱和密碼必須事先透過加密儲存機制儲存到 Portal 平臺,此時代理程式建立的信用狀同時包含了此使用者在該 Web 應用系統中的密碼。代理程式攜帶此使用者的使用者名稱和密碼呼叫 Web 驗證服務實現認證過程,認證完成後,至於此使用者在該 Web 系統中到底有哪些許可權,這就由接下來的 Web 系統去執行了,因為此時此使用者已經透過呼叫驗證服務的手段成功登入了該 Web 應用系統。如圖 1- 2 所示。

1- 2   門戶伺服器進行身份驗證過程 Web 應用提供 Authentication API 的情況

 ① 使用者登入門戶伺服器。

 ② 請求建立使用者預設桌面。

 ③ 代理程式使用 Portal Token 並批准使用 Web 應用的 Authentication API 進行使用者身份驗證。所使用的使用者名稱與登入門戶伺服器時使用的一樣,或者是一個對映值,對映表應存放在門戶伺服器的 Profile 中。

 ④ 進行使用者鑑權。

 ⑤ 鑑權成功。

 ⑥ 代理程式使用 Web 應用 API   獲取資料。

 ⑦ 代理程式將得到的資料格式化後生成使用者預設桌面,應用程式的內容以門戶 Channel 的形式展現。

 ⑧ 將生成的桌面傳送給使用者。

上面所提到的代理程式,可以透過 IBM WebSphere Portal 提供的 API 編寫的  Servlet 程式實現。這個  Servlet   程式將使用者的信用狀傳遞給應用程式,並將使用者重定向到應用的主頁面。  

外接代理的優點:

—  啟動投資相對較少。

缺點:

—  不利於系統管理和維護。

—  對系統總體效能有影響。

—  不支援跨域的 SSO

內建代理方法 利用策略管理軟體,即 Identity 伺服器軟體。策略管理軟體的工作原理是,在 Web 伺服器上安插一個代理模組( Agent Module ),該模組與   Identity   伺服器共同負責使用者身份驗證和授權資訊。

將策略管理軟體與 Portal 伺服器進行整合,可以將策略代理模組安裝在內嵌於 Portal 伺服器中的 Web 伺服器上,並使用 Portal 伺服器提供的 API ,基於策略管理軟體的 S ession 建立過程生成一個有效的 Portal   伺服器 S ession 。這樣,使用者可以在策略管理系統的控制下訪問任何 W eb 應用。

內建代理的 優點:

—  透過 Identity 伺服器及其 Web 代理模組可以安全 有效地控制使用者身份驗證和資源訪問

—  提供集中的訪問控制管理,增強大型複雜應用系統的可管理性和效率

—  為系統開發人員提供一種簡單的方法對集中化的目錄資源進行訪問,易於擴充套件

—  透過 Extranet Web Agents ,可以無縫地整合 Web 應用

—  具有 支援百萬級使用者的良好系統擴充套件性

—  保護投資

—  支援跨域的 SSO

從邏輯概念上 Identity 伺服器作為企業核心的應用訪問控制器,而 Portal 伺服器則是一個內容聚合器,聚合由 Identity 伺服器保護的應用。同時, Portal 伺服器還作為企業內部安全的應用訪問轉送器。 使用內建代理實現 Portal Web 應用系統的原理及過程如下,我們分 12 個步驟來介紹。

 ① 使用者訪問門戶閘道器。

 ② 門戶閘道器檢查當前 IPS Session 是否包含有效的 Cookie ,如果不包含(即 Session 還未建立),門戶閘道器則將資訊包傳給門戶伺服器的身份驗證模組。

 ③ 伺服器的身份驗證模組將資訊包轉發給 Identity 伺服器的代理模組。

 ④ 代理模組給使用者傳送一個經過定製的登入頁面(此頁面顯示使用 Identity 伺服器進行身份驗證)。

  使用者輸入使用者名稱 / 口令(或其他身份資訊),並返回給代理模組。

 ⑥ 代理模組將該資訊傳送給 Identity   伺服器。

 ⑦ Identity 伺服器驗證使用者身份(查詢儲存使用者資訊的目錄資料庫)。

 ⑧ 證成功, Identity 伺服器生成 Identity Cookie (包含驗證成功等資訊) , 併傳送給代理模組。

 ⑨ 代理模組儲存 Identity Cookie ,並呼叫門戶伺服器的身份驗證模組使 Session 有效(生成一個 Portal Session )。

 ⑩ 門戶伺服器的身份驗證模組將 Identity Session Portal Session 傳送給使用者瀏覽器。

 ⑪ 門戶閘道器儲存 Portal Session ,使使用者的 Session 生效。

 ⑫ 門戶閘道器給使用者傳送門戶首頁。

一旦身份驗證流程完成,使用者不需要重新認證就可以訪問由門戶伺服器及 Identity 伺服器保護的任何資源和應用。

頁面流方式實現單點登入

頁面流方式的單點登入,指的是使用者成功登入 Portal 後,在業務系統中使用者每呼叫一次 Web 系統的頁面, Web 系統都要聯絡代理進行一次驗證。 iDSAME 產品就提供了這種功能,它是一種更加嚴格的訪問控制策略,用來保護企業核心、重要系統的資料和資源,具體實現是由 iDSAME Web 代理以及相應的 URL 訪問策略來共同完成的。

Web 代理安裝在受保護資源的機器上,當使用者訪問受保護的系統資源時, Web 代理首先截獲請求,檢查訪問的是否是受保護資源,如果不是,則允許訪問;如果是, iDSAME 則會根據使用者的 Token 檢查使用者能訪問還是不能訪問。與內建代理、外接代理不同,使用該策略實現單點登入會嚴重降低應用系統的效能,因為使用者每訪問一個頁面,都會引起一次鑑權的過程。通常,這種情況應用於企業的比較核心和重要的業務系統中。

交叉域單點登入( Cross Domain SSO )是指實現單點登入的幾個應用伺服器在不同的域內。在這種情況下要實現單點登入,必須將其他域轉換到本地域,進行域名對映。交叉域單點登入實現原理示意圖如圖 1- 3 所示。

1- 3   交叉域單點登入實現原理示意圖

1.1 .2   單點登入的技術方案

針對整合的不同的應用系統,我們會提供不同的單點登入解決方案,下面是實現單點登入功能的 常用技術方案。

1 LTPA Lightweight Third-Party Authentication 令牌環技術

LTPA 是一種令牌環,上面記錄了使用者的登入資訊和身份資訊,它 提供 基於 Cookie 的輕量級第三方認證機制( LTPA ),當使用者發出對資源的請求時,首先 必須 認證伺服器 認證。認證成功後, 認證伺服器 代表使用者生成 LTPA Cookie 。作為認證標記服務的 LTPA Cookie 包含使用者標識、金鑰和標記資料、緩衝區長度和到期資訊,此資訊使用 認證伺服器 應用系統 之間共享的受密碼保護的金鑰加密。 認證伺服器 在請求的 HTTP 頭中插入 Cookie ,該請求透過連線傳送到 應用系統 應用系統 伺服器接收請求、解密 Cookie 並基於 Cookie 中提供的標識資訊認證使用者。

2 .基於表單的單點登入( Form-Based SSO

於表單的單點登入 Form-Based SSO 功能 允許 認證伺服器 將已認證的使用者透明地登入到需要透過 HTML 表單認證的後臺系統中 。基於表單的單點登入實現原理示意圖如 1- 4 所示。

1- 4   基於表單的單點登入實現原理示意圖

3 HTTP 標頭檔案( HTTP Header )技術

利用 HTTP Header 這種認證方式, 認證伺服器 可以把經過認證的使用者身份資訊(包括賬號、屬性資訊等),透過 HTTP Header 傳給後臺的應用系統,後臺的應用系統可以從 HTTP Header 中把這些使用者資訊擷取出來,用來確認使用者身份,從而實現統一認證(單點登入)的功能。這種統一認證的方式需要後臺的應用系統進行相應的修改,使它可以獲得 HTTP Header 中的使用者資訊。

4 .憑證保險庫( GSO-Lockbox )技術

GSO-Lockbox 這種實現單點登入的方式一般會和 Form-Based SSO 方式一起來使用,主要 考慮到每個人在各個系統中的使用者身份可能會不一致,利用這種方式可以解決這種問題。利用 GSO-Lockbox ,可以建立起使用者身份資訊和後臺應用系統之間的對應關係

在不同的產品中有各自的實現方式,例如,在 IBM WebSphere Portal 中叫做 Credential Vault ,也翻譯為 “憑證保險庫”。憑證保險庫為實現單點登入的每套應用系統建立一個憑證保險段,在每個憑證保險段裡則為每個 Web 使用者建立一個憑證保險槽。槽是最小的憑證單位,用來儲存一個使用者在一套應用系統中的使用者名稱和密碼鍵值對(見表 1- 1 )。

1- 1   GSO-Lockbox 實現單點登入的方式

以上幾種方式很難說誰最好,最佳實踐的做法是根據客戶的具體情況選用不同的解決方案,或幾種實現方案同時使用,依據不同的應用系統情況而定。但通常來說,應遵循如下幾個原則。

1 )對部署在 WebSphere Application Server WebLogic Server SAP NetWeaver Application Server Domino 等伺服器上能識別 LTPA 令牌環,且使用者目錄與 Portal 的使用者目錄為同一套,或者有一一對應關心的應用系統,與 Portal 實現單點登入時,建議採用 LTPA 機制。

2 )對部署在 WebSphere Application Server WebLogic Server SAP NetWeaver Application Server Domino 等伺服器上,且使用者目錄與 Portal 的使用者目錄不是同一套,或者沒有一一對應的應用系統,與 Portal 實現單點登入時,建議採用 JAAS 認證。

3 )使用者登錄檔與 Portal 不一致,但應用系統中的使用者在 Portal 中都有對應的使用者時,不管其使用者名稱編排規則是否一致,皆建議採用憑證保險庫技術。

1.2    單點登入在最佳專案實踐 中的應用

使用單點登入技術實現 Portal 系統與其他應用系統的單點登入後,使用者只要成功登入 Portal ,就可以無須再次登入而直接進入應用系統,或者在 Portal 中直接使用應用系統中授權的應用或資訊。在進行實際專案開發時,通常會設計如下幾種模式,作為單點登入及單點登入的擴充套件應用。

1.2 .1   以列表的方式進入應用系統首頁

以列表的方式進入應用系統首頁,指的是提供一個展現應用系統列表的 Portlet ,上面列出了實現單點登入的所有應用系統(見圖 1- 5 )。點選列表中的條目,可以直接在新的頁面中進入該應用系統,而無須再次登入或者提供任何憑證。

1- 5   以列表 Portlet 的方式應用單點登入

1.2 .2   直接進入各個應用系統的深度整合模式

很多時候,使用者需要進入到系統的某個深層次頁面,而不是從系統首頁一步步點選。單點登入的深度整合模式指的是透過不同的標籤直接進入到客戶想進去的頁面,如圖 1- 6 所示。

1- 6   點選不同的標籤直接進入到應用系統的深度整合頁面

1.2 .3   以應用導航的方式梳理後整合

很多客戶會有這樣的經驗:當應用系統過多時,自己都忘記了發起某個業務或某個功能的頁面到底在哪套系統中。應用導航整合思路指的是,不是從應用系統的角度梳理深度整合的頁面,而是從使用者的業務應用角度來分析,將使用者經常使用的功能頁面從業務的角度梳理、分類,並分門別類地展現到系統中。使用者只需知道要幹什麼就行了,而不必關心要執行的這個頁面到底在哪套系統中。也就是說,讓使用者忘掉系統的存在。圖 1- 7 所示是典型的應用導航圖。

1- 7   典型的應用導航圖(應用導航允許使用者忘記系統的存在,只需知道要幹什麼就行了)

1.2 .4   作為統一待辦呼叫任務處理介面時的通用驗證邏輯單元

單點登入的最廣泛和深入的應用莫過於統一工作待辦了。把所有系統中每個使用者需要待辦的事項分門別類地按照業務域劃分出來,並集中展現到一個個欄目中,讓使用者原來需要登入多套系統去處理的待辦事項,在一個欄目中就完成了,多方便啊!圖 1- 8 所示是將來自幾十套系統的待辦事項統一整合到一個欄目中,並按照 9 大業務域劃分的一個典型場景。

1- 8   按照業務域在一個欄目中集中展現來自幾十套系統的待辦事項

1.3    單點登入技術的開發 /配置指南

單點登入的實現技術還有很多,比如 JAAS 認證等,但在專案實踐中應用最多的就是 LTPA 令牌環和憑證保險庫技術。本節詳細介紹這兩種方案的開發 / 配置過程。

1.3 .1  LTPA 技術是如何實現

1.3 .1.1  LTPA 對於 SSO 工作 機制

LTPA 機制適用於部署在 WebSphere Application Server WebLogic Server SAP NetWeaver Application Server Domino 等伺服器上,它能識別 LTPA 令牌環,以及使用者目錄與 Portal 的使用者目錄為同一套,或有一一對應關係的應用系統。本節以 WebSphere Portal Domino 之間實現單點登入為例,介紹 LTPA 機制是如何配置的。

LTPA 輕量級第三方認證 )是一個令牌環, 它是透過使用 Domain Cookie 而啟用的。這種經過加密的會話 C ookie 被放置在使用者瀏覽器中,包含了一些資訊, WebSphere 或者 Domino Application 伺服器可以加密這些資訊,並使用這些資訊來說明使用者已經透過該 C ookie 所覆蓋的 DNS Domain Naming Service ,域名服務)域中的認證。

LTPA C ookie 包含以下資訊

—  Cookie 名稱:總是設定為 LtpaToken

—  域:設定為 Internet 域,該域由參與單點登入的所有伺服器共享(例如: mycompany.   com )。

—  Cookie 到期:設定為當瀏覽器終止時刪除該 C ookie

—  安全:設定為開狀態,以強制使用安全套接字層 SSL LTPA 配置有一個設定引數,使它建立只透過 SSL 傳送的 C ookie

—  Cookie 值:被設定為 LTPA 標記。

LTPA 標記是一個加密的字串,它包含以下資訊

—  使用者資料:一般被設定為使用者 ID ,但也可以是任何用於 一標識使用者的使用者資訊。

—  過期時間:與 Cookie 過期不同,這個欄位用於強加一個時間限制,時間限制從登入進來的那一刻算起,而不受瀏覽器活動或者不活動影響。 這個時間限制是一個可 置的 LTPA 置, 在預設 情況下為 30 分鐘。

1.3 .1.2   如何配置 Portal Domino 之間的 SSO

Portal Domino SSO 可以透過配置 LTPA 的方法來實現。通俗地講就是,使用者登入 Portal 系統後, Portal 系統會把使用者登入資訊加密成 LTPA 並存放到某一位置,當使用者繼續訪問 Domino 系統中的授權資源時, Domino 系統會自動讀取該位置的 LTPA ,讀到並解密後拿到 Domino 系統中驗證,如果驗證透過,則顯示給使用者授權資訊。所以要配置 Portal Domino 之間的 SSO 非常容易,只要先將 Domino 系統伺服器的 LTPA 匯出並存為 .key 檔案,然後匯入 Portal 系統所在的伺服器( WebShpere Application Server )中就可以了。

1.3 .2   憑證保險庫 技術是如何實現的

1.3 .2.1   概述

WebSphere Portal 提供了 Credential Vault (憑證保險庫)功能 Credential Vault 透過 Basic Authentication Header 將使用者名稱和密碼傳遞給後端應用程式。為了使 Domino 伺服器接受透過這個頭部傳遞進來的憑證,必須將伺服器會話驗證配置為 Single-Server 模式。在 Multi-Server 模式中,該伺服器只接受透過 LTPA 機制傳遞的憑證。因此,為了與 Domino 應用程式一起使用用於 SSO Credential Vault ,必須將 Domino 伺服器會話驗證配置為 Single-Server 模式。

要使用 Credential Vault ,使用者需輸入一些憑證,輸入一次就夠了。隨後,這些憑證被存放在一個經過加密的資料庫表中,每當使用者訪問該 P ortlet 時,這些憑證便被傳遞給後端應用程式。要了解關於配置 Credential Vault 的細節, 參見 WebSphere Portal InfoCenter

1.3 .2.2  憑證保險庫實現 SSO 原理

下面以一個最簡單的 SSO 過程為例進行介紹。

  通業務系統的登入過程:系統首先提供一個頁面,讓我們輸入應用程式中的使用者資訊。

  使用者輸入使用者名稱和密碼後,單擊 “登入”按鈕,該頁面提交到 form 所對應的 Action check_login.jsp )進行處理,我們看 check_login.jsp 的程式碼。

接下來提交到資料庫驗證使用者資訊的合法性,如果合法,則定位到授權資訊頁面;否則,重定位回到登入頁面 login.jsp

Portlet 開發中是如何解決這個問題的?

其實起關鍵作用的還是 check_login.jsp 頁面,它需要獲得使用者名稱和密碼兩個鍵值,然後拿著這兩個引數到後臺資料庫去驗證。在常規的登入方式中,這兩個引數是透過 login.jsp 獲得的。事實上,只要 Portlet 能為該頁面提供這兩個鍵值,也就實現了登入的自動化。而 Portlet 要得到這兩個引數是非常簡單的,所以實現單點登入也就非常簡單了。我們可以複製一個 check_login.jsp 檔案,例如名為 check_portal_login.jsp ,這個頁面的兩個引數是 Portlet 提供的,剩下的事完全交給業務系統去處理,頁面流轉和全線控制都不用我們管了。

1.3 .2.3  開發 Portlet 實現 SSO 的方法

1 JSP 取值傳送 URL

我們開發一個使用系統專用槽的 Portlet ,使用憑證保險庫的相關介面在 PortletView.jsp 中取出使用者儲存在憑證保險庫中的鍵值,然後以 URL 的方式傳送到 iFrame 內。

PortletView.jsp 的部分程式碼如下:

如果使用者已經在憑證保險庫中儲存了鍵值,那麼該 Portlet View.jsp 頁面被初始化時, iFrame 中將顯示使用者成功登入後的授權資訊,也就是實現了 SSO

2 Class 取值寫 Session JSP 取出並以 URL 傳送

我們在 Portlet 的控制類中取得使用者儲存在憑證保險庫中的鍵值對,並在 PortletView doview() 方法中寫入 Session 。在 Portlet 的V iwe.jsp 中取出 Session ,然後像第一種方法一樣,以 URL 的方式傳送到目的代理。

3 Class Session ,單點登入代理取 Session

我們在 Portlet 的控制類中取得使用者儲存在憑證保險庫中的鍵值對,並在 PortletView doview() 方法中寫入 Session 。而專為 Portal 開發的協助登入頁面則會直接從 Session 中取出使用者憑證,具體的操作方法略過。

由於這幾種方法開發起來比較簡單,所以這裡就一帶而過,不再詳細介紹了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9116427/viewspace-2219972/,如需轉載,請註明出處,否則將追究法律責任。

相關文章