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