關鍵詞:
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之間進行比對 。
IdCenter 怎麼控制權限?
因爲不肯意在權限控制時涉及各個管理系統的業務邏輯,因此朱傳志約定權限是針對 URL(或者說是 URI) 的,以下圖2所示,首先咱們會錄入要管轄的管理系統的 URL。
圖2 錄入各類URL
而後咱們要設定用戶組,以下圖3所示:
圖3 設置分組
點擊「設置URL」按鈕,咱們爲這個分組設定它均可以對哪些 URL 有權限訪問:
圖4 爲分組設置URL
還能夠爲分組設置該用戶組都包含哪些用戶:
圖5 爲分組設置用戶
IdCenter 的記錄訪問日誌功能
咱們終於能夠在一個集中的地方看到內部各個管理系統的登陸日誌了,嘿呀:
圖6 登陸日誌
咱們還能夠按用戶來查看他於什麼時間使用了哪些權限(也就是訪問了哪些登記在冊的 URL):
圖7 權限日誌
好了,最後咱們看一下完整的 IdCenter 首頁吧:
圖8 首頁
這就是 IdCenter,一個爲了避免重複製造輪子而製造出來的解決方案。
-over-