鄭昀 基於朱傳志的設計文檔 最后更新於2014/11/13
關鍵詞:
LDAP
、認證、權限分配、IdCenter、
本文檔適用人員:研發
曾經一個IT內部系統配一套帳號體系和授權
線上生產環境里,技術人員需要登錄許多內部系統,如:
- memcached/redis/mongodb 的管控系統
- 譬如我得有個把線上某個 memcached 的某個業務端口下某個/某些鍵值清空的 Web 界面吧;
- 譬如我得有個查出某個緩存鍵值並選擇用哪一個Java Class反序列化的功能吧;
- jobcenter/notifyserver/推薦評測 的控制台
- dubbo 的服務治理控制台
- 持久化配置中心 的控制台
- CobarManager 控制台
- ……
每個IT系統都是不同人開發的,如果每個人都設計自己的用戶體系和RBAC權限體系,第一重復制造輪子浪費體力,第二大家需要記住無數系統入口和帳號密碼,第三每當有離職時還得記得逐一禁用賬戶。
所以在 JobCenter/NotifyServer/Diamond/Dubbo 等陸續上線后,孟珂和傳志於2013年又開始運作起內部統一認證系統。
IdCenter 要干什么?
目標是建立一個內部各個管理系統能統一使用的用戶認證和權限管理中心,以提高各個內部系統的安全性,並統一和簡化內部系統的權限開發工作。具體包括:
- 進行內部管理系統的統一用戶認證和各種權限管理;
- 兼容現有的各個內部管理系統;
- 記錄部分系統訪問日志。
用戶來自於哪里?是 IdCenter 自己創建出來的?不。是運維在 UNIX/Linux 環境下通過 OpenLDAP 配好 LDAP 服務,IdCenter 根據 LDAP 協議同步用戶過來。這樣有幾個好處:
- 開啟用戶、禁用/刪除用戶只需要在一個集中的地方做;
- 不僅僅研發的內部管理系統可以用,運維 DevOps 的內部管理系統也可以用這套用戶體系;
- 不需要重復制造輪子。
注意不是自動同步,而是手動同步,如下圖所示:

圖0 同步LDAP數據
系統分為兩部分:
- 認證中心:
- 用戶登錄和密碼修改
- 控制界面,可以對用戶和權限進行設置
- 接收過濾客戶端的權限驗證請求,並作出判斷
- 過濾客戶端(filter):
- 安裝在各個內部管理系統中
- 過濾用戶的訪問請求
- 向認證中心發起用戶和權限認證請求
- 根據認證中心回復阻攔或放行用戶訪問請求
業務流大致如下:

圖1 授權方式
由於內部系統可能是 Java/PHP/dotNET/Python 等開發語言,所以要求權限檢查接口具有跨語言跨平台性,於是朱傳志的權限檢驗接口統一提供為 HTTP+Json 格式調用。
為了保證校驗效率,IdCenter 使用內存緩存以提高權限驗證時間,它緩存下面兩項內容:
- 用戶->組List
- URL->組List
它使用常用駐留和設置過期方式,校驗會在兩個組List之間進行比對 。
IdCenter 怎么控制權限?
由於不願意在權限控制時涉及各個管理系統的業務邏輯,所以朱傳志約定權限是針對 URL(或者說是 URI) 的,如下圖2所示,首先我們會錄入要管轄的管理系統的 URL。

圖2 錄入各種URL
然后我們要設定用戶組,如下圖3所示:

圖3 設置分組
點擊“設置URL”按鈕,我們為這個分組設定它都可以對哪些 URL 有權限訪問:

圖4 為分組設置URL
還可以為分組設置該用戶組都包含哪些用戶:
圖5 為分組設置用戶
IdCenter 的記錄訪問日志功能
我們終於可以在一個集中的地方看到內部各個管理系統的登錄日志了,嘿呀:

圖6 登錄日志
我們還可以按用戶來查看他於什么時間使用了哪些權限(也就是訪問了哪些登記在冊的 URL):

圖7 權限日志
好了,最后我們看一下完整的 IdCenter 首頁吧:

圖8 首頁
這就是 IdCenter,一個為了不重復制造輪子而制造出來的解決方案。
-over-
窩窩的解決方案介紹列表:
#研發解決方案#基於StatsD+Graphite的智能監控解決方案
#研發解決方案介紹#Recsys-Evaluate(推薦評測)
歡迎訂閱我的微信訂閱號『老兵筆記』,請掃描二維碼關注:
