上圖是3個登入場景,分別為:第一次訪問www.qiandu.com、第二次訪問、以及登入狀態下第一次訪問mail.qiandu.com。
下面就詳細說明上圖中每個數字標號做了什麼,以及相關的請求內容,響應內容。
標號1:使用者訪問經過他的第乙個過濾器(cas提供,在web.xml中配置)authenticationfilter。
過濾器全稱:org.jasig.cas.client.authentication.authenticationfilter
主要作用:判斷是否登入,如果沒有登入則重定向到認證中心。
首先可以看到我們請求www.qiandu.com,之後瀏覽器返回狀態碼302,然後讓瀏覽器重定向到cas.qiandu.com並且通過get的方式新增引數service,該引數目的是登入成功之後會要重定向回來,因此需要該引數。並且你會發現,其實server的值就是編碼之後的我們請求www.qiandu.com的位址。
標號3:瀏覽器接收到重定向之後發起重定向,請求cas.qiandu.com。
標號4:認證中心cas.qiandu.com接收到登入請求,返回登陸頁面。
上圖就是標號3的請求,以及標號4的響應。請求的url是標號2返回的url。之後認證中心就展示登入的頁面,等待使用者輸入使用者名稱密碼。
標號5:使用者在cas.qiandu.com的login頁面輸入使用者名稱密碼,提交。
標號6:伺服器接收到使用者名稱密碼,則驗證是否有效,驗證邏輯可以使用cas-server提供現成的,也可以自己實現。
上圖就是標號5的請求,以及標號6的響應了。當cas.qiandu.com即csa-server認證通過之後,會返回給瀏覽器302,重定向的位址就是referer中的service引數對應的值。後邊並通過get的方式挾帶了乙個ticket令牌,這個ticket就是st(數字3處)。同時會在cookie中設定乙個castgc,該cookie是**cas.qiandu.com的cookie,只有訪問這個**才會攜帶這個cookie過去。
cookie中的castgc:向cookie中新增該值的目的是當下次訪問cas.qiandu.com時,瀏覽器將cookie中的tgc攜帶到伺服器,伺服器根據這個tgc,查詢與之對應的tgt。從而判斷使用者是否登入過了,是否需要展示登入頁面。tgt與tgc的關係就像session與cookie中sessionid的關係。
tgt:ticket granted ticket(俗稱大令牌,或者說票根,他可以簽發st)
tgc:ticket granted cookie(cookie中的value),存在cookie中,根據他可以找到tgt。
st:service ticket (小令牌),是tgt生成的,預設是用一次就生效了。也就是上面數字3處的ticket值。
標號7:瀏覽器從cas.qiandu.com**拿到ticket之後,就根據指示重定向到www.qiandu.com,請求的url就是上面返回的url。
標號8:www.qiandu.com在過濾器中會取到ticket的值,然後通過http方式呼叫cas.qiandu.com驗證該ticket是否是有效的。
標號9:cas.qiandu.com接收到ticket之後,驗證,驗證通過返回結果告訴www.qiandu.com該ticket有效。
至此,第一次訪問的整個流程結束,其中標號8與標號9的環節是通過**呼叫的,並不是瀏覽器發起,所以沒有擷取到報文。
上面以及訪問過一次了,當第二次訪問的時候發生了什麼呢?
標號11:使用者發起請求,訪問www.qiandu.com。會經過cas-client,也就是過濾器,因為第一次訪問成功之後www.qiandu.com中會在session中記錄使用者資訊,因此這裡直接就通過了,不用驗證了。
標號12:使用者通過許可權驗證,瀏覽器返回正常資源。
標號13:使用者在www.qiandu.com正常上網,突然想訪問mail.qiandu.com,於是發起訪問mail.qiandu.com的請求。
標號16:認證中心收到請求,發現tgc對應了乙個tgt,於是用tgt簽發乙個st,並且返回給瀏覽器,讓他重定向到mail.qiandu.com
標號18:mail.qiandu.com獲取ticket去認證中心驗證是否有效。
標號19:認證成功,返回在mail.qiandu.com的session中設定登入狀態,下次就直接登入。
標號20:認證成功之後就反正用想要訪問的資源了。
CAS登入流程
訪問http localhost analysis 請求會被ngixn如下配置攔截 location analysis 最後會定位到 analysis index.html接著會請求一系列靜態資源,也走nginx的該配置 其中的乙個js會首先發起非同步呼叫 這個時候,會被nginx的如下配置攔截 l...
CAS單點登入流程梳理
新的專案中,需要對接單點登入,於是了解了一下cas的登入流程。按照流程圖,前端需要在初次進頁面的時候,請求伺服器獲取鑑權。服務端發現這個使用者沒有相關憑證的時候,可以返回相應的狀態碼告知前端需要登入。前端跳轉到https cas login?service http 進行登入。登入完成之後,cas會...
CAS與單點登入的流程及原理
cas central authentication service sso single sign on center cas 認證中心 a 某應用服務 b 另乙個應用服務 ticket granted ticket tgt 全域性票 ticket granted cookie tgc 存放 tg...