資訊整合中的單點登入技術

2021-05-27 03:11:13 字數 4250 閱讀 8476

ilife's 部落格

sso(single sign-on)直譯為一次登入,使用者只使用乙個使用者名稱和口令,就可以訪問所有的資源,這對系統管理和維護來說是非常重要的。單點登入有效地解決了使用者使用網路時的多帳號、多密碼、多次登入問題,方便了使用者。

sso理論基礎

sso並不是j2ee(或.net)中的標準實現,而是各家中介軟體提供商在提供j2ee(或.net)應用伺服器時提供的一種認證資訊共享的機制,所以各家廠商提供的實現方式不一樣, 在這些系統中,其實現方法方向分為兩種: 一種是建立在pki,kerbose和使用者名稱/口令儲存的基礎上,一種是建立在cookie或session的基礎上。ibm的websphere是通過cookies記錄認證資訊,bea的weblogic通過session共享技術實現認證資訊的共享,國內深圳金蝶的apusic採用的和bea的技術基本一致。在這兩種方式中,各有不足,前者需要安裝專門的客戶端,因而面向的使用者物件是有限的,而後者授權方式只能方便地支援本產品系列的應用,而對第三方的認證和許可權系統不能很方便的整合。

sso的前提條件

1、所有應用系統共享乙個身份認證系統

所有伺服器必須共享使用者登錄檔(使用者資料庫),使用者登錄檔可以是ldap資料庫,也可以採用使用者自己實現的使用者登錄檔。要注意的是在某些情況下是不能使用自己實現的使用者登錄檔的,例如,domino不支援使用者自己實現的使用者登錄檔,所以websphere和domino之間實現sso時只能採用ldap資料庫作為公有的使用者登錄檔。

統一的認證系統是sso的前提之一。認證系統的主要功能是將使用者的登入資訊和使用者資訊庫相比較,對使用者進行登入認證;認證成功後,認證系統應該生成統一的認證標誌(token),返還給使用者。另外,認證系統還應該對token進行效驗,判斷其有效性。

2、所有應用系統能夠識別和提取token資訊

要實現sso的功能,讓使用者只登入一次,就必須讓應用系統能夠識別已經登入過的使用者。應用系統應該能對token進行識別和提取,通過與認證系統的通訊,能自動判斷當前使用者是否登入過,從而完成單點登入的功能。

3、單一的使用者資訊資料庫並不是必須的

有許多系統不能將所有的使用者資訊都集中儲存,應該允許使用者資訊放置在不同的儲存中。事實上,只要統一認證系統,統一token的產生和效驗,無論使用者資訊儲存在什麼地方,都能實現單點登入。

4、統一的認證系統並不是說只有單個的認證伺服器

認證伺服器之間要通過標準的通訊協議,互相交換認證資訊,就能完成更高階別的單點登入。如:當使用者在訪問應用系統1時,由第乙個認證伺服器進行認證後,得到由此伺服器產生的token。當他訪問應用系統2的時候,認證伺服器2能夠識別此token是由第乙個伺服器產生的,通過認證伺服器之間標準的通訊協議(例如saml)來交換認證資訊,仍然能夠完成sso的功能。

5、對應用系統的修改不可避免

並不是任何系統都能夠使用sso,只有那些符合sso規範,使用sso api的應用系統才具有sso的功能。簡單地說就是要修改已有的應用系統(在本專案中,已有的業務系統要實現單點登入,如果步具備相應的條件,則必須進行修改),遮蔽已有的應用系統的使用者認證模組,使用系統提供的sso api來驗證使用者,以及對使用者的操作進行授權。

實現單點登入的兩種方式

sso都要有乙個單一的登入點,由此登入點將建立的會話(認證標誌)token傳遞給應用系統。sso需要建立乙個統一的認證、許可權資訊庫。根據認證、授權實現的位置可以分為兩種實現方式:

1、agent的方式

即在後端為每個web應用系統(或者其他系統)都安裝乙個agent,由agent來接管該系統的身份驗證和訪問控制,目錄伺服器中會存放自己的使用者資訊,以及這些使用者與其他系統的使用者對應資訊。這些agent能夠通過配置,輕鬆的接管了後面的系統的身份驗證和訪問控制。

對於不同的系統,agent不同,這些agent能夠通過配置,輕鬆的接管後面系統的身份驗證和訪問控制。可以通過乙個統一的ldap,存放企業內部的使用者資訊,然後通過策略伺服器,控制後端所有系統的url訪問許可權,這樣也實現了單點登入。

使用這種方式,其安全性較高,使用者資訊都儲存在各系統中,但是這種方式需要在各個系統中都安裝agent,降低了系統的靈活性。

2、proxy的方式

即具有乙個proxy server,由它來接管對於後端系統的訪問,提交請求和讀取資料,然後再返回給呼叫者。同時呼叫者可以存放使用者資訊以及使用者的對應關係。proxy server會通過儲存的使用者對應關係和使用者名稱和密碼,自動完成後端系統的登入,然後就象乙個瀏覽器一樣,提取資料,返回資料給後端系統。後台系統不用做任何修改,身份認證和訪問控制仍然由各個系統自己管理。

該方法的優點是:後端系統不用做任何改動。即便是沒有portal,其他系統還可以照常使用。缺點是:需要在策略伺服器中儲存使用者名稱和密碼,密碼會多處存放,同步困難;使用者可以繞開portal,直接訪問後端系統。proxy server可能是單點故障。缺點解決:目前有密碼同步產品;proxy server也大多支援集群。

由以上兩種方式可以看出,哪種方式的程式設計量都不是很大,大多可以通過配置來實現,而且功能也很強大,可以根據系統實際情況進行選擇。

基於agent方式的單點登入實現流程

在每個web應用系統都安裝乙個agent,由agent來接管該系統的身份驗證和訪問控制的方式實現,如下圖所示.

圖 基於agent方式的單點登入實現過程

1、使用者訪問應用系統。由登入點將sso token(針對不同的c/s,b/s應用可能還需要傳遞使用者名稱,口令)傳遞給應用系統,應用系統利用sso token來進行使用者已認證的驗證。

2、當使用者試圖通過瀏覽器訪問受保護的應用資源時,系統提供安裝在不同應用上的sso agent來擷取使用者對資源的請求,並檢查請求是否存在會話識別符號,即token。如果token不存在,即使用者沒有在自己的伺服器登入,請求就被重定向,傳遞給單點登入伺服器(使用重定向就可以處理各伺服器跨域的情況)。在單點登入伺服器上會話服務負責建立會話token,然後認證服務將提供登陸頁面以驗證使用者。

在使用者身份驗證之前,會話服務建立了會話token。token為隨機產生的會話識別符號,該識別符號代表了乙個確定使用者的特定會話。建立會話token後,認證服務把token插入cookie中,在使用者的瀏覽器中設定cookie。在token被設定的同時,該使用者將會看到乙個登陸頁面。

cookie是由web伺服器建立的資訊包,並傳遞給瀏覽器。cookie 儲存類似使用者習慣等web伺服器產生的資訊。它本身並不表明使用者通過了認證。cookie是特定於某個域的。在身份伺服器的實現中,cookie由會話服務產生,並由認證服務設定。而且,身份伺服器的cookie是會話cookie,儲存在記憶體中。會話token由會話服務建立並插入cookie。會話token利用安全隨機數發生器產生,幷包含系統伺服器特有的會話資訊。在訪問受保護的資源之前,使用者由認證服務驗證,並建立sso token。

3、單點登入伺服器檢查到使用者已經單點登入(如果使用者沒有單點登入則要求使用者登入,登入標誌儲存為客戶端瀏覽器的cookie),找到該使用者在相應應用系統上繫結的賬號。這些認證資訊就被發給認證提供者(authentication provider)(ldap伺服器,radius伺服器等)進行驗證。

4、一旦認證提供者成功驗證了認證資訊,使用者就被認為是通過了認證。身份伺服器會從使用者的token中取出會話資訊並將會話狀態設為有效。單點登入伺服器根據生成的使用者token,重定向回應用系統。此後,使用者就可以訪問這些受保護的資源。

5、應用系統接收統一格式的使用者token,取得使用者在本系統上的登入賬號,將使用者在本系統上狀態置為登入,返回使用者請求訪問的頁面。

如果使用者在訪問應用系統之前已經在單點登入伺服器上登入過,第二步到第四布對使用者來說就是透明的,使用者感覺只是向應用系統發出了訪問請求,然後得到了頁面反饋。

基於proxy方式的單點登入實現流程

基於proxy的實現方案如novel ichain的實現。這種方案需要通過dns將多個系統的網域名稱配置在乙個承擔sso的proxy上。當使用者輸入系統位址開啟頁面時,會首先鏈結到這個proxy,再由proxy**到實際系統。原有系統因為使用者沒有登入,那麼會返回登入頁面,這時候ichain會截獲這個登入頁面,用自己的登入頁面代替。使用者在ichain提供的頁面中輸入使用者名稱和密碼,隨後ichain根據ldap(novel的ldap可以說是這行的老大了)中的資訊查詢出原有系統的使用者名稱和密碼,通過一次http post將使用者賬號傳送給原有系統。 

如果使用者開啟新系統頁面,那麼基本不驟不變,只是ichain返回自己登入頁面時,因為在同乙個域中,可以發現該使用者已經登入過,然後就直接http post到新系統而不出現登入頁面。

其實sso只是最簡單的乙個步驟,如何做好多系統之間的賬號同步和授權才是大難題。

單點登入和技術實現機制

單點登入 single sign on 簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。color red sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。color 技術實現機制 當使用者第一次訪問應用系統1的時候,因為還沒有登入,會被引導到認證系...

NC整合CAS統一認證 單點登入原理

原理及步驟 1 瀏覽器中輸入應用位址 進入nc 伺服器 1處理 如果 uri是 index.jsp 且ticket null 且assertion null 則跳轉到 cas認證頁面。2 cas 登入成功,跳轉回業務系統 index.jsp 頁面。進入nc 伺服器 1處理 此時 ticket nul...

CAS單點登入三 客戶端獲取登入資訊

通過上篇的配置,登入是從資料庫中進行驗證了。那麼現在要解決的問題是,客戶端怎麼知道登入者是誰呢?如何獲取登入者的資訊。首先還是開啟deployerconfigcontext.xml這個配置檔案 找到id為attributerepository的bean。預設這個bean配置的應該是org.jasig...