由單點登陸到aws的http服務。html
From: https://www.jianshu.com/p/613e44d4a464web
單點登陸SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登陸後,就不用在其餘系統中登陸,也就是用戶的一次登陸能獲得其餘全部系統的信任。數據庫
單點登陸在大型網站裏使用得很是頻繁,例如像阿里巴巴這樣的網站,在網站的背後是成百上千的子系統,用戶一次操做或交易可能涉及到幾十個子系統的協做,若是每一個子系統都須要用戶認證,不只用戶會瘋掉,各子系統也會爲這種重複認證受權的邏輯搞瘋掉。跨域
實現單點登陸說到底就是要解決如何產生和存儲那個信任,再就是其餘系統如何驗證這個信任的有效性,所以要點也就如下兩個:安全
最簡單的單點登陸實現方式,是使用cookie做爲媒介,存放用戶憑證。
用戶登陸父應用以後,應用返回一個加密的cookie,當用戶訪問子應用的時候,攜帶上這個cookie,受權應用解密cookie並進行校驗,校驗經過則登陸當前用戶。服務器
對於跨域問題,可使用JSONP實現。cookie
最後一種介紹的方式,是經過父應用和子應用來回重定向中進行通訊,實現信息的安全傳遞。
父應用提供一個GET方式的登陸接口,負載均衡
用戶經過子應用重定向鏈接的方式訪問這個接口,微服務
* 若是用戶尚未登陸,則返回一個的登陸頁面,用戶輸入帳號密碼進行登陸。post
* 若是用戶已經登陸了,則生成加密的Token,而且重定向到子應用提供的驗證Token的接口,經過解密和校驗以後,子應用登陸當前用戶。
這種方式較前面兩種方式,接解決了上面兩種方法暴露出來的安全性問題和跨域的問題,可是並無前面兩種方式方便。
安全與方便,原本就是一對矛盾。
下面拿我作過的案例來講:
例如原始應用的網址是http://localhost:8080/cas-client/,在這個客戶端登陸頁面裏form表單包含登陸用戶名和密碼,一開始有以下語句,轉向CAS服務器的單點登陸頁面 https://sso.nubb.com/login?service=http://localhost:8080/cas-client/。
SSO服務器完成主體認證後,會使用下面URL進行重定向 http://localhost:8080/cas-client/?ticket= ST-2-7FahVdQ0rYdQxHFBIkKgfYCrcoSHRTsFZ2w-20。 收到ticket以後,應用程序須要驗證ticket。這是經過將ticket 傳遞給一個校驗URL來實現的。校驗URL也是SSO服務器提供的。
SSO服務器經過校驗路徑得到了ticket以後,經過內部的數據庫對其進行判斷。若是判斷是有效性,則返回一個NetID給應用程序。 隨後CAS將ticket做廢,而且在客戶端留下一個cookie。
之後其餘應用程序就使用這個cookie進行認證(固然經過CAS的客戶端),而再也不須要輸入用戶名和密碼。
相見原文
本文涉及到:http服務負載均衡等任務,例如經過Nginx [ Nginx is a web server which can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.]
如何利用aws將網站各個功能作成微服務的形式,這是往後的重點。