cas server php下载,关于用CAS Server与Php、Jetty配置实现SSO#4
最早由Yale開發的CAS在目前開源SSO市場上占據了80%的份額。簡單研究了一下,感覺CAS確實比較成熟,認證流程均可通過證書保證安全,也提供了對多種App服務器和開發環境的支持。比較感興趣的是兩個:Php和Jetty,前者較為常用;后者是Hadoop平臺內置的Jetty服務器。
一、配置Php認證
這個相當簡單,有人實現了一個PhpCAS庫,只需將CAS.php和client.php等三個php文件放置到應用目錄下即可。然后代碼中加入4行代碼即可實現SSO,如下。其中需要指出的是這個例子并沒有使用服務器證書認證,而只是讓Apache/Php服務器從CAS服務器經由SSL驗證PT。這種方式的前提是服務器之間是互相信任的,否則就可以讓惡意服務器獲取用戶的一些信息。如需證書認證,會相當麻煩,參見后面的討論
// import phpCAS lib
include_once('CAS.php');
// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,'tomcat',8443,'cas-server-webapp-3.4.2');
//此處要注意版本,目前CAS協議已經到3.0,但是還兼容2.0
// no SSL validation for the CAS server
phpCAS::setNoCasServerValidation();
// force CAS authentication
phpCAS::forceAuthentication();
二、配置Jetty認證
Jetty是一個比Tomcat更為小巧的Java應用服務器,被包括Hadoop、GAE在內的系統使用,GAE的某人說的很有道理,一個Jetty節省1MB內存,則10000個服務器就可以節省10GB空間,能省干嗎不省呢?
Hadoop平臺中,Jetty被當做一個嵌入式服務器使用了,配置基本上和Tomcat類似,都是需要配置Filter,此類配置很多,就不詳述了。在應用中需要寫一個跳轉頁面就可以了,對于Hive稍微羅嗦一些,主要是Hive默認使用了一個war文件,因此為了配置簡單就需要使用兩個war文件,一個支持SSO,一個不支持
- 當然也可以不這么用。應用中需要寫如下2行代碼獲取用戶名稱:
Object uo =
session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
if (uo instanceof String) user =
(String)uo;
三、配置服務器證書
配置證書比寫出來代碼更為麻煩,基本的教程中都是使用keytool生成自簽名的證書,這種證書對于Tomcat來說,是可以接受的,但是處于安全性,Jetty不支持自簽名證書,這就帶來了很多的問題,這里有2種方法解決:
1. 修改CAS
Client的代碼,使用http來做服務器端驗證。(注:CAS客戶端默認是不支持這種方式的,極其不安全,其代碼中多次判斷是否驗證URL是https)
2. 配置非自簽名證書。步驟如下:
2.1
自己搭建CA,可以使用OpenSSL,生成一個root證書,用root證書為CAS服務器簽署一個服務器證書,將root證書導出為JKS格式。
2.2 將CAS服務器所在的Tomcat服務器(或者其他服務器)的JVM
Keystore中導入CAS服務器證書,同時也可以復制一份放到Tomcat中
2.3 將root證書轉換為瀏覽器認識的格式,比如pkcs12,導入瀏覽器
2.4 將root證書導入到Jetty服務器的JVM Keystore中,同時也可以復制一份到Jetty中
這樣,瀏覽器就可以接受CAS服務器的證書,Jetty服務器也可以接受CAS服務器的證書,達到互相信任的效果,實現SSO。這個流程還是很復雜的,我在2.4遇到問題,Jetty不認識JVM中的證書,以后閑下來再研究吧。
四、關于用戶注冊的思考
由于用戶信息在CAS服務器和應用服務器上實際上都有存放,一般來說CAS只保存最為基本的用戶名和密碼認證信息,而應用服務器需要保存授權信息。這樣就帶來了雞生蛋還是蛋生雞的問題,或者說信息如何同步的問題。我想這不是什么技術問題,而是一種管理問題。比如在企業應用中可以統一創建用戶目錄,比如LDAP,預先部署用戶的認證信息,由于服務器之間互信,只需使用統一的用戶名就可以實現SSO。
應用服務器是否保存用戶認證信息其實并不重要,但是應用服務器提供注冊用戶的功能時,需要在CAS用戶數據庫和應用中同時保存用戶信息,一旦不同步,則無法實現SSO。
總結
以上是生活随笔為你收集整理的cas server php下载,关于用CAS Server与Php、Jetty配置实现SSO#4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring 使用其他类protecte
- 下一篇: mysql exists in join