企業(yè)內(nèi)網(wǎng),,建立在企業(yè)內(nèi)部,為員工提供信息的共享和交流,,為業(yè)務(wù)提供運營和管理的支撐,,已是當(dāng)今企業(yè)信息化建設(shè)必不可少的一個項目。隨著企業(yè)的規(guī)模越來越大,,業(yè)務(wù)越來越廣,,系統(tǒng)建設(shè)就顯得尤為重要,。 統(tǒng)一認(rèn)證系統(tǒng)是企業(yè)內(nèi)網(wǎng)系統(tǒng)建設(shè)的基礎(chǔ),,主要實現(xiàn)用戶管理、身份認(rèn)證,、權(quán)限管理和單點登錄等功能,,以解決企業(yè)內(nèi)網(wǎng)系統(tǒng)建設(shè)過程中用戶定義模糊、用戶身份組織零亂,、交叉權(quán)限管理和應(yīng)用系統(tǒng)出口多樣性等棘手的問題,。 基于此,五阿哥運維技術(shù)團隊基于Python建設(shè)了統(tǒng)一認(rèn)證(BUC:Back User Center)和權(quán)限控制(ACL:Access Control List)平臺,,這個系統(tǒng)技術(shù)架構(gòu)圖如下: 系統(tǒng)的功能 1.用戶管理 在企業(yè)中,,每個用戶都有一個唯一的賬號進(jìn)行登錄,用戶的賬號和個人身份信息(包含姓名,、郵件等公共屬性)會集中保存在內(nèi)網(wǎng)統(tǒng)一認(rèn)證系統(tǒng)里,。但對于同一個用戶在外部系統(tǒng)中的賬號,如微信,、釘釘,、Tower等第三方系統(tǒng),統(tǒng)一認(rèn)證系統(tǒng)也可以通過定時同步或?qū)崟r查詢等方式獲取到用戶的信息,。 2.安全管理 對于保存在企業(yè)內(nèi)網(wǎng)中的用戶賬號進(jìn)行認(rèn)證是比較方便的,,對于保存在外部系統(tǒng)中的用戶賬號,,可以通過定時同步或?qū)崟r驗證等方式來驗證用戶的鑒權(quán),最終統(tǒng)一以唯一的身份使用戶登錄進(jìn)入系統(tǒng),。 同時,,企業(yè)內(nèi)部存在多個不同的業(yè)務(wù)應(yīng)用,以所有應(yīng)用均接入統(tǒng)一認(rèn)證平臺為基礎(chǔ),,各個業(yè)務(wù)系統(tǒng)的用戶認(rèn)證采用單點登錄認(rèn)證模式,,一次登錄即可在各個業(yè)務(wù)子系統(tǒng)中完成自動認(rèn)證并獲得相關(guān)授權(quán)。 3.應(yīng)用管理 不同的業(yè)務(wù)系統(tǒng)會對用戶進(jìn)行不同的角色劃分,,不同的角色又會劃分出細(xì)粒度的權(quán)限,。角色權(quán)限在統(tǒng)一認(rèn)證系統(tǒng)中保存,在一個地方就可以完成用戶授權(quán)信息的設(shè)定,。 4.系統(tǒng)接入 支持各種技術(shù)棧的系統(tǒng)接入,,包含Java和Python等,其中各技術(shù)棧的SDK可以在Github項目中找到,。 5.三方應(yīng)用 第三方應(yīng)用,,包含郵箱,VPN,,無線等直接進(jìn)行SSO登錄,。 6.系統(tǒng)監(jiān)控 對系統(tǒng)運行、操作,、會話進(jìn)行監(jiān)控,,保障在受到外部或者內(nèi)部攻擊時,能夠及時發(fā)現(xiàn),,進(jìn)行實例回溯,。 7.系統(tǒng)審計 對平臺所有操作進(jìn)行審計,在出現(xiàn)系統(tǒng)權(quán)限錯亂或者安全問題的時候,,對平臺操作進(jìn)行審計,。 系統(tǒng)架構(gòu)設(shè)計 1.接口設(shè)計 企業(yè)內(nèi)網(wǎng)的統(tǒng)一認(rèn)證平臺建議基于B/S模式設(shè)計,后端使用Django框架以快速開發(fā),,用DB+LDAP方式完成用戶各類信息的存儲,,保障存儲和查詢效率。 統(tǒng)一認(rèn)證的核心問題是鑒權(quán)中心和各子系統(tǒng)之間的通信接口問題,,用戶認(rèn)證接口協(xié)議可以基于標(biāo)準(zhǔn)化HTTP/HTTPS方式實現(xiàn),,并對外提供不同語言的SDK(如Python CAS庫、Java Web過濾器等),,使得第三方業(yè)務(wù)系統(tǒng)的接入不完全依賴于特定的開發(fā)環(huán)境,。 2.安全設(shè)計 對于接入系統(tǒng),認(rèn)證中心接口協(xié)議調(diào)用采用HTTPS傳輸?shù)姆绞?,通信安全問題將轉(zhuǎn)化到HTTPS傳輸?shù)陌踩詥栴}上,,而對于HTTPS通道的攻擊,,可以由單獨的網(wǎng)絡(luò)掃描模塊專門負(fù)責(zé)監(jiān)控。 對于統(tǒng)一認(rèn)證和SSO接口參數(shù)的信息安全,,一方面網(wǎng)站可采用專有加密算法對參數(shù)內(nèi)容進(jìn)行加密,,另一方面,可以采用IP認(rèn)證策略來保證對接口雙方的信任,,系統(tǒng)通過通道安全和信息加密雙保險的措施來保證統(tǒng)一認(rèn)證體系的接口安全,。 同時系統(tǒng)配有全方面的應(yīng)用監(jiān)控和訪問日志的審計,當(dāng)機器發(fā)生異常情況或日志審計檢測到有可疑入侵行為時,,會自動以多種方式通知到運維工程師和相關(guān)負(fù)責(zé)人,。 BUC使用技術(shù)和實現(xiàn) 1.用戶管理 通常在企業(yè)中,每個用戶擁有一個唯一的身份標(biāo)識,,即用戶名,。同時用戶在其他內(nèi)網(wǎng)或外部應(yīng)用也存在著對應(yīng)的用戶,如果能使用同一個用戶身份最為方便,;獨立的用戶可以通過關(guān)聯(lián)不同的系統(tǒng)的用戶使之對外呈現(xiàn)為一個用戶,。用戶可以在不同的應(yīng)用系統(tǒng)中使用,這一切的基礎(chǔ)是有一個中央的系統(tǒng)來保存和管理這些用戶,。常見的解決方案有Windows活動目錄和LDAP,。 (1)Windows活動目錄域服務(wù) 使用 Active Directory(R) 域服務(wù) (AD DS) 服務(wù)器角色,可以創(chuàng)建用于用戶和資源管理的可伸縮,、安全及可管理的基礎(chǔ)機構(gòu),,并可以提供對啟用目錄的應(yīng)用程序(如 Microsoft(R) Exchange Server)的支持。 AD的功能,,來自微軟的介紹 AD DS 提供了一個分布式數(shù)據(jù)庫,,該數(shù)據(jù)庫可以存儲和管理有關(guān)網(wǎng)絡(luò)資源的信息,,以及啟用了目錄的應(yīng)用程序中特定于應(yīng)用程序的數(shù)據(jù),。 運行 AD DS 的服務(wù)器稱為域控制器。 管理員可以使用 AD DS 將網(wǎng)絡(luò)元素(如用戶,、計算機和其他設(shè)備)整理到層次內(nèi)嵌結(jié)構(gòu),。內(nèi)嵌層次結(jié)構(gòu)包括 Active Directory 林、林中的域以及每個域中的組織單位 (OU),。 域模式的最大好處就是單一的網(wǎng)絡(luò)登錄能力,,用戶只要在域中有一個賬戶,就可以在整個網(wǎng)絡(luò)中漫游,?;顒幽夸浄?wù)增強了信任關(guān)系,擴展了域目錄樹的靈活性,?;顒幽夸洶岩粋€域作為一個完整的目錄,,域之間能夠通過一種基于Kerberos認(rèn)證的可傳遞的信任關(guān)系建立起樹狀連接,從而使單一賬戶在該樹狀結(jié)構(gòu)中的任何地方都有效,,這樣在網(wǎng)絡(luò)管理和擴展時就比較輕松,。 同時,活動目錄服務(wù)把域又詳細(xì)劃分成組織單元,。組織單元是一個邏輯單元,,它是域中一些用戶和組、文件與打印機等資源對象的集合,。組織單元中還可以再劃分下級組織單元,,下級組織單元能夠繼承父單元的訪問許可權(quán)。每一個組織單元可以有自己單獨的管理員并指定其管理權(quán)限,,它們都管理著不同的任務(wù),,從而實現(xiàn)了對資源和用戶的分級管理?;顒幽夸浄?wù)通過這種域內(nèi)的組織單元樹和域之間的可傳遞信任樹來組織其信任對象,,為動態(tài)活動目錄的管理和擴展帶來了極大的方便。 (2)LDAP技術(shù) 輕型目錄存取協(xié)定(英文:Lightweight Directory Access Protocol,,縮寫:LDAP)是一個開放的,,中立的,工業(yè)標(biāo)準(zhǔn)的應(yīng)用協(xié)議,,通過IP協(xié)議提供訪問控制和維護(hù)分布式信息的目錄信息,。 目錄服務(wù)在開發(fā)內(nèi)部網(wǎng)和與互聯(lián)網(wǎng)程序共享用戶、系統(tǒng),、網(wǎng)絡(luò),、服務(wù)和應(yīng)用的過程中占據(jù)了重要地位。例如,,目錄服務(wù)可能提供了組織有序的記錄集合,,通常有層級結(jié)構(gòu),例如公司電子郵件目錄,。同理,,也可以提供包含了地址和電話號碼的電話簿。 LDAP目錄樹圖示,,來自網(wǎng)絡(luò) LDAP協(xié)議是跨平臺的和標(biāo)準(zhǔn)的協(xié)議,,因此應(yīng)用程序就不用為LDAP目錄放在什么樣的服務(wù)器上操心了。實際上,,LDAP得到了業(yè)界的廣泛認(rèn)可,,因為它是Internet的標(biāo)準(zhǔn)。廠商都很愿意在產(chǎn)品中加入對LDAP的支持,,因為他們根本不用考慮另一端(客戶端或服務(wù)端)是怎么樣的,。 LDAP服務(wù)器可以是任何一個開放源代碼或商用的LDAP目錄服務(wù)器(或者還可能是具有LDAP界面的關(guān)系型數(shù)據(jù)庫),,因為可以用同樣的協(xié)議、客戶端連接軟件包和查詢命令與LDAP服務(wù)器進(jìn)行交互,。 與LDAP不同的是,,如果軟件廠商想在軟件產(chǎn)品中集成對DBMS的支持,那么通常都要對每一個數(shù)據(jù)庫服務(wù)器單獨定制,。不像很多商用的關(guān)系型數(shù)據(jù)庫,,你不必為LDAP的每一個客戶端連接或許可協(xié)議付費。大多數(shù)的LDAP服務(wù)器安裝起來很簡單,,也容易維護(hù)和優(yōu)化,。 (3)用戶管理實踐 根據(jù)國內(nèi)企業(yè)辦公網(wǎng)絡(luò)的實際情況,用戶計算機通常為Windows系統(tǒng),,通通接入到Windows活動目錄中進(jìn)行管理,。而且Windows活動目錄兼容LDAP協(xié)議,我們使用活動目錄作為統(tǒng)一保存用戶信息的中央系統(tǒng),,再通過LDAP協(xié)議使用程序訪問域控制器將用戶信息同步到統(tǒng)一認(rèn)證服務(wù)器中,。 企業(yè)內(nèi)部系統(tǒng)基本結(jié)構(gòu) 由上圖架構(gòu)所示,一方面常見的辦公系統(tǒng)(如代碼倉庫,、Wiki等)自身即支持LDAP認(rèn)證,,通過配置Windows AD中的目錄/用戶搜索規(guī)則即完成對登錄用戶的認(rèn)證;另一方面自行開發(fā)的業(yè)務(wù)系統(tǒng)通過中央認(rèn)證服務(wù)器提供的接口間接的對Windows AD進(jìn)行登錄用戶的認(rèn)證,,即一個用戶,,一套密碼,在多個系統(tǒng)中都可使用,。 2.身份認(rèn)證 (1)通過外部應(yīng)用認(rèn)證 外部應(yīng)用,,如即時通訊軟件釘釘?shù)龋@些應(yīng)用存有單獨的一套用戶憑證,,通過應(yīng)用提供的免登服務(wù),,將應(yīng)用中的用戶與統(tǒng)一認(rèn)證服務(wù)器中的用戶進(jìn)行一一對應(yīng),當(dāng)用戶在外部應(yīng)用中登錄后,,自動獲得在企業(yè)內(nèi)應(yīng)用的已登錄狀態(tài),。 (2)通過TOTP動態(tài)驗證碼認(rèn)證 OTP (One-Time Password) ,,一次性密碼,,也稱動態(tài)口令。它是使用密碼技術(shù)實現(xiàn)在客戶端和服務(wù)器之間共享秘密的一種認(rèn)證技術(shù),,是一種強認(rèn)證技術(shù),,是增強目前靜態(tài)口令認(rèn)證的一種非常方便的技術(shù)手段,是一種重要的雙因素認(rèn)證技術(shù),。 TOTP (Time-base One-Time Password) ,,基于時間的一次性密碼,,也稱時間同步的動態(tài)密碼。當(dāng)在一些用戶不方便輸入密碼或者忘記密碼的場景中,,我們可以使用TOTP進(jìn)行認(rèn)證,。服務(wù)器和用戶各自保管共同的密鑰,通過比對基于時間分片與哈希計算出的動態(tài)數(shù)字驗證碼即可完成對用戶身份的認(rèn)證,。主流實現(xiàn)為Google Authenticator(Google身份驗證器),,阿里的身份寶也兼容該算法。 TOTP算法圖示 (3)雙因子認(rèn)證 雙因子認(rèn)證(Two-Factor Authentication)是指結(jié)合密碼以及實物(信用卡,、SMS手機,、令牌或指紋等生物標(biāo)志)兩種元素對用戶進(jìn)行認(rèn)證的方法。 動態(tài)驗證碼流程圖示 結(jié)合上面使用的TOTP驗證碼,,對于安全級別較高的應(yīng)用或資源路徑,、或是系統(tǒng)探測到風(fēng)險較高的操作時,即可以對用戶重定向至雙因子認(rèn)證頁面,,進(jìn)一步保障系統(tǒng)安全,。 3.單點登錄 主要實現(xiàn)方式: (1)共享 cookie 利用同一域名下的cookie共享為基礎(chǔ),將session id寫入共享cookie,,在實現(xiàn)了后臺session共享存儲和訪問后,,不同的應(yīng)用之間即實現(xiàn)了單點登錄。 (2)Broker-based (基于經(jīng)紀(jì)人) 在一個基于經(jīng)紀(jì)人的 SSO 解決方案中,,有一個集中的認(rèn)證和用戶賬號管理的服務(wù)器,。經(jīng)紀(jì)人能被用于進(jìn)一步請求的電子的身份存取。中央數(shù)據(jù)庫的使用減少了管理的代價,,并為認(rèn)證提供一個公共和獨立的'第三方',。例如 Kerberos 、 Sesame ,、 IBM KryptoKnight (憑證庫思想 ) 等,。 (3)Agent-based(基于代理人) 在這種解決方案中,有一個自動地為不同的應(yīng)用程序認(rèn)證用戶身份的代理程序,。這個代理程序需要設(shè)計有不同的功能,。比如,它可以使用口令表或加密密鑰來自動地將認(rèn)證的負(fù)擔(dān)從用戶移開,。代理人被放在服務(wù)器上面,,在服務(wù)器的認(rèn)證系統(tǒng)和客戶端認(rèn)證方法之間充當(dāng)一個 ' 翻譯 ' ,例如 SSH 等,。 (4)Token-based 口令認(rèn)證,,比如 FTP 、郵件服務(wù)器的登錄認(rèn)證,這是一種簡單易用的方式,,實現(xiàn)一個口令在多種應(yīng)用當(dāng)中使用,。 基于網(wǎng)關(guān)基于 SAMLTicket-based(基于票據(jù)) 4.BUC實踐 在我們的內(nèi)網(wǎng)應(yīng)用中,最終選擇了CAS協(xié)議作為單點登錄的方案,。CAS(Central Authentication Service)是 Yale 大學(xué)發(fā)起的一個企業(yè)級的,、開源的項目,旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點登錄解決方法,。CAS開始于2001年,,并在2004年12月正式成為JA-SIG的一個項目。 CAS的主要特點有: 開源支持多種認(rèn)證機制:Active Directory,、JAAS,、JDBC、LDAP,、X.509等安全策略:使用票據(jù)(Ticket)來實現(xiàn)支持的認(rèn)證協(xié)議支持授權(quán):可以決定哪些服務(wù)可以請求和驗證服務(wù)票據(jù)提供高可用性支持多種客戶端及SDK: Java,, .Net,PHP,,Python,,nodejs 等服務(wù)端也有多種語言實現(xiàn) (1)登錄驗證流程 用戶、CAS客戶端,、服務(wù)端三方交互過程 (2)安全擴展 當(dāng)CAS服務(wù)端完成了對用戶和CAS客戶端的驗證之后,,CAS服務(wù)端將驗證后的用戶信息傳輸給CAS客戶端(目標(biāo)應(yīng)用),同時也可根據(jù)配置返回該應(yīng)用下的附屬用戶信息,,如用戶擁有的該應(yīng)用下的角色,、權(quán)限和屬性。目標(biāo)應(yīng)用根據(jù)服務(wù)器返回的用戶信息進(jìn)一步檢查用戶可訪問的資源,,適當(dāng)?shù)恼故緲I(yè)務(wù)視圖,。 四、ACL使用技術(shù)和實現(xiàn) 在現(xiàn)代企業(yè),,尤其是互聯(lián)網(wǎng)企業(yè)中,,產(chǎn)品業(yè)務(wù)繁多,對數(shù)據(jù)安全,、訪問控制都提出了很高的要求,,基于用戶組織結(jié)構(gòu),、匯報線等傳統(tǒng)的分組模式已經(jīng)無法適應(yīng)和滿足多變的互聯(lián)網(wǎng)扁平化管理模式的需要,,因此我們選擇了基于角色和權(quán)限的動態(tài)分組來設(shè)計和實現(xiàn)企業(yè)中不用應(yīng)用可以共享的安全訪問管理系統(tǒng),。 1.權(quán)限 權(quán)限是針對資源和操作層面的最小安全訪問控制單元,例如: 按資源分,,可以設(shè)置訪問設(shè)備A,、訪問設(shè)備B等,。按操作分,,可以設(shè)置讀取文件,,寫入文件等。 例-1:權(quán)限分類示意圖 2.角色 角色是針對應(yīng)用使用者來設(shè)置的,,可分為管理員,、技術(shù)人員,普通用戶等,,也可按區(qū)域分為華北員工,、華南員工等。 角色是一系列權(quán)限的集合,,擁有某角色的用戶即應(yīng)當(dāng)自動擁有該角色下包含的權(quán)限,。 圖-7:角色與權(quán)限關(guān)系示意圖 3.屬性 屬性是針對用戶層面下設(shè)置的獨立的安全設(shè)置,用來擴展和實現(xiàn)更細(xì)粒度的自定義安全設(shè)置數(shù)據(jù),,如將可訪問數(shù)據(jù)細(xì)化到數(shù)據(jù)庫中的表,、數(shù)據(jù)表中的行、列上,。 得益于JSON的兼容性,,可以很靈活的存儲下這些自定義的結(jié)構(gòu)化數(shù)據(jù)。 用戶屬性示意圖 ACL實踐 數(shù)據(jù)庫建模 依模型圖可以看出,,一個應(yīng)用可劃分多個角色,、權(quán)限、路徑和屬性,,其中角色又可包含同應(yīng)用下的權(quán)限和路徑,。一個用戶對應(yīng)一個ACL,通過將不同的控制單元授予用戶,,即可完成用戶的訪問控制配置,。 配套功能設(shè)計 為了使訪問控制的整套機制良好的運轉(zhuǎn)起來,相關(guān)輔助和配套的功能也是不可缺少的,,這里列舉一些我們已經(jīng)投入使用的功能: (1)應(yīng)用授權(quán)的分級,、分組管理 不用業(yè)務(wù)應(yīng)用的負(fù)責(zé)人可以分別對自己負(fù)責(zé)的業(yè)務(wù)進(jìn)行授權(quán)管理,不會產(chǎn)生沖突和越權(quán),。 (2)應(yīng)用菜單可見性,、可訪問性的集成 業(yè)務(wù)應(yīng)用中的各子功能可以和預(yù)先設(shè)置的權(quán)限一對一或一對多映射,具有相應(yīng)權(quán)限的用戶才可以訪問和使用相應(yīng)的功能,,前后臺設(shè)置保持同步,。 (3)應(yīng)用下角色權(quán)限申請?zhí)峤弧⑹跈?quán)變更,、授權(quán)完成等自動化流程 基本的權(quán)限審批流減小了業(yè)務(wù)應(yīng)用負(fù)責(zé)人和使用者之間的溝通成本,,同時也記錄了權(quán)限獲取的記錄,,為日后的安全審計提供了可查的數(shù)據(jù)。 (4)應(yīng)用訪問日志收集,、分析,、審計、報警等 應(yīng)用訪問日志記錄了更為詳細(xì)的用戶訪問和操作記錄,,為安全審計提供了更完備的數(shù)據(jù)支持,,同時也支持以一定的邏輯來分析和發(fā)現(xiàn)潛在的安全泄露風(fēng)險。 五,、總結(jié) 本文總結(jié)介紹了針對企業(yè)內(nèi)網(wǎng)門戶的統(tǒng)一用戶管理,、認(rèn)證和授權(quán)管理的系統(tǒng)的組成部分和常見實現(xiàn)方法。使用開源CAS產(chǎn)品搭建的統(tǒng)一身份認(rèn)證系統(tǒng)和定制化開發(fā)的安全訪問控制系統(tǒng)在企業(yè)內(nèi)網(wǎng)平臺上得到了很好地實踐和應(yīng)用,,各部門的業(yè)務(wù)系統(tǒng)也已穩(wěn)定接入并使用,,目前運行良好。隨著系統(tǒng)規(guī)模和業(yè)務(wù)的增長,,這一套平臺仍可能會面臨新的問題和挑戰(zhàn),,這也使得我們在收集用戶反饋的同時不斷的進(jìn)行重構(gòu)和增強,以保障企業(yè)業(yè)務(wù)的穩(wěn)定發(fā)展,。 項目地址: https://github.com/cangelzz/cas-demo-django-server https://github.com/cangelzz/cas-demo-flask-client https://github.com/cangelzz/cas-demo-java-client |
|