自動化運維平臺中的統一認證接入與SSO單點登錄
前言:
在工作中,大大小小開發了不少自動化運維平臺,能更好的提高效率以及人工的失誤。有朋友問我,登錄平臺的賬號密碼如何的管理。當聽到這個問題的時候,我說直接入庫呀,但是說完后,覺得相當的不妥,最少和我現在解決方案也不一樣。
以前做運維開發項目的時候,每個app都是一套用戶密碼,頂多做了一個加密流轉,申請接入的時候,需要領導的郵件審批,后期改成ldap在openldap做認證了。 但是現在不這么搞了。
原因呢? 我相信大家公司肯定都有認證的接口,先說下常見的認證接口有那兩種(我就見過這兩種,希望朋友補充):
- 公司的各個平臺通過ldap連入windows ad目錄,或者是連入特定的db。 當時這樣很不安全,如果我是開發者的話,用戶輸入用戶名和密碼的時候,點擊登錄,我完全可以把賬號密碼給print出來。
- Passport方案,這個算是統一認證,一般是oauth,但是oauth相對麻煩點。大家有時候,要登錄論壇的時候,他會提示可以用qq,支付寶,人人的賬號登錄。 我現在的方案就是類似這種的方法,好! 下面說下,我對這個統一認證的接口使用。
我自己也寫過一個 統一認證平臺接口,是基于cookie方式的,實現的方法相對簡單,但是很有效,安全方面讓安全部門測試過,在一定條件下,還是很安全的。在以前公司開發的多個平臺也都接入了這個統一認證。
|
語言:python 框架:tornado 模塊:requests,flask-admin,oauth2 組件:redis,mysql 前端:Bootstrap |
對于python oauth2的方案,可以看 https://github.com/simplegeo/python-oauth2
- 得到授權碼code
- 獲取access token
- 通過access token,獲取OpenID
- 通過access token及OpenID調用API,獲取用戶授權信息
這里的方案不是oauth2,因為oauth2更多的是給大批的第三方應用設計的,咱們這里只是做passport認證,用oauth2顯得不是太合適。
集群平臺clusterops clusterops.xiaorui.cc,中心認證passport.xiaorui.cc為例:
- 判斷用戶是否登錄,已經在passport登錄的話,可以直接訪問clusterops,如果沒有登錄的話,會轉跳到 passprot.xiaorui.cc/redirect?urlto=clusterops.xiaorui.cc
- 當轉跳到 passprot.xiaorui.cc/redirect?urlto=clusterops.xiaorui.cc的時候,會提示用你的域賬戶和密碼登錄,登錄成功后,會再次轉跳到 clusterops.xiaorui.cc/api?res=aqggzwnasdzo9kzwsxedclmcksduwe8sdf0d&Token=F3fQk1eTJWu2XbWHEzuXXJ0KoJeH6O
- clusterops接收api接口的res和Token字段數據,用這兩個字段以cookie的方式去訪問passport.xiaorui.cc/getuserdata?accesstime=時間戳
- 統一認證端passport拿到了cookie在redis里面做對比,然后判斷access時間,在5分鐘之內,符合要求給他return 用戶數據,如果不符合,就給他回一個錯誤數據。
- clusterops解析了返回的json數據,把username及一些數據,放到session里面,這樣用戶就完成了認證及登錄。
看這個流程圖比較直觀點,一般來說我們只是對于web應用做認證接入,認證后,在這個web應用的所有動作權限,都是在web應用本身做的。如果每個應用和連接都再次向認證系統去驗證cookie、session,那就會有瓶頸,所以用saml使兩個認證服務器做認證通信 !
上面說的只是統一認證方面的,下面再來說說單點登錄。
單點登錄SSO(Single Sign-On)是身份管理中的一部分。SSO的一種較為通俗的定義是:SSO是指訪問同一服務器不同應用中的受保護資源的同一用戶,只需要登錄一次,即通過一個應用中的安全驗證后,再訪問其他應用中的受保護資源時,不再需要重新登錄驗證。
開源的sso,也有不少,我用過lemonldap這個websso方案,感覺還不錯。
SSO的好處:
方便用戶:從用戶實際使用角度考慮
用戶使用應用系統時,能夠一次登錄,多次使用。用戶不再需要每次輸入用戶名稱和用戶密碼,也不需要牢記多套用戶名稱和用戶密碼。
方便管理員:從日常維護管理角度考慮
系統管理員只需要維護一套統一的用戶賬號,方便、簡單。相比之下,系統管理員以前需要管理很多套的用戶賬號。每一個應用系統就有一套用戶賬號,不僅給管理上帶來不方便,而且,也容易出現管理漏洞,開發者也不知道用戶的賬號密碼
簡化應用系統開發:從應用擴展角度考慮
開發新的應用系統時,可以直接使用單點登錄平臺的用戶認證服務,簡化開發流程。單點登錄平臺通過提供統一的認證平臺,實現單點登錄。因此,應用系統并不需要開發用戶認證程序。
單點登錄在這里就很好體現了,只要用戶登錄了passport統一認證,登錄后平臺會session標記,只要別的項目指向PassPort認證,那自然而然他們都可以登錄了。
另外,我們一定要再開發一套針對統一認證passport的權限控制,不然每個應用都自己控制admin和guest的權限,這樣會顯得很亂。 這段時間我也配置一套權限管理接口,可以配套在統一認證接口上,權限控制的很細,一個頁面,一個菜單,一個動作都可以控制。
歐了,這里是我自己對于運維平臺的統計認證,sso單點登錄,權限管理的理解。 我相信,我的這篇文章更加適合新手理解,當然肯定也有理解出問題的地方,請大神指正 !


























