最近在研究單點登錄,發現用的最廣的就是cas了,查了下資料,發現有人寫了詳細的說明
地址:http://www.cnblogs.com/zhenyulu/archive/2013/01/22/2870838.html
記錄下我按照上面的文章搭建cas遇到的坑
1.我下載的tomcat是8.5的,發現按照上面的配置方法,SSL死活配不通,去網站下了7.0的就可以
2.循環重定向的問題,按上面的方法進行了修改和配置還是會出現循環重定向,直到刪除了配置文件authentication節點下的path,就OK了
然后是測試在使用.Net Mvc接入Cas
1.先配置好了webconfig,參數以及httpmodel注冊等
2.寫好自己的驗證控制器
public override void OnAuthorization(AuthorizationContext filterContext) { if (!HttpContext.Current.User.Identity.IsAuthenticated) { DotNetCasClient.CasAuthentication.RedirectToLoginPage(); return; } else { HttpContext.Current.Session["UserName"] = CasAuthentication.CurrentPrincipal.Identity.Name; } }
3.在自己的控制器上寫下該特性,然后訪問網站就能跳轉到CAS的登錄網站,調試的時候發現客戶端在連接的時候會多次在服務器和客戶端之間跳轉,嘗試連接-獲取票據-連接成功返回,貌似就是這么個過程
[CasFilter] public ActionResult Index() { return View(); }
4.做完單點登錄,做單點注銷,發現幾個問題,
1)調用CAS的注銷地址:serverip/cas/logout是可以正常注銷的
2)使用post調用SingleSignOut方法是無效的;
3)SingleSignOut方法會產生一個重定向,即跳轉到服務器進行注銷,但這個重定向有一個回調地址,也就是你注銷時調用的控制器,比如 Account/Logout,這樣會再次跑到你的注銷方法里面去,在過認證過濾器的時候,因為已經注銷就會跳轉到認證登陸界面,此時的訪問的是logout的控制器,因此登陸回調地址還是logout,so,死循環了,登陸-注銷-登陸-注銷
4).鑒於上述原因,在logou方法中調用SingleSignOut后手動重定向到Home/Index,但是這樣又有一個問題,singleSignOut調用的重定向執行時間可能比執行重定向到主頁慢,這樣能正常跳轉,但是會明顯的看到瀏覽器地址欄有兩次跳轉,暫時沒想到其他的好辦法去解決這個問題;
5.在做登陸判斷的時候一開始用的是CasAuthentication.CurrentPrincipal是否有值來判斷,但發現無論是登陸和注銷都會要多次刷新界面才有效果的情況,所以改用asp.net提供的驗證字段來判斷
6.昨天又發現個問題,MVC客戶端取不到cas登陸用戶的詳細信息,調試后發現是響應信息XML序列化的時候找不到對應的字段導致直接被過濾掉了,而且獲取信息的地方也沒有傳值過去,修改源代碼添加對應的字段,手動傳參
7.今天又發現了個悲劇的問題,編輯器中的富文本內容傳不過去,其實在后台是已經使用了MVC的ValidateInput(false),但子啊經過cas的httpmodul時,還是拋錯了,修改配置文件,禁用掉整個web的驗證有效果,但這樣做好像太不安全了。
8.鑒於安全原因將html內容使用js的encodeURIComponent編碼后再傳到后台,再后台再解碼就行了。