CAS (Central Authentication Service)是Yale大學(xué)的ITS開(kāi)發(fā)的一套JAVA實(shí)現的開(kāi)源
的SSO(single sign-on)的服務(wù)。
這里用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明用CAS來(lái)實(shí)現單點(diǎn)登陸(SSO)。
Yale CAS Server 的配置過(guò)程
CAS (Central Authentication Service)是Yale大學(xué)的ITS開(kāi)發(fā)的一套JAVA實(shí)現的開(kāi)源
的SSO(single sign-on)的服務(wù)。該服務(wù)是以一個(gè)java web app(eg:cas.war)來(lái)進(jìn)行服務(wù)的,
使用時(shí)需要將cas.war發(fā)布到一個(gè)servlet2.3兼容的服務(wù)器上,并且服務(wù)器需要支持SSL,
在需要使用該服務(wù)的其他服務(wù)器(客戶(hù)),只要進(jìn)行簡(jiǎn)單的配置就可以實(shí)現SSO了。
CAS 的客戶(hù)端可以有很多種,因為驗證的結果是以XML的格式返回的,CAS的客戶(hù)端已
打包進(jìn)去的有java,perl,python,asp,apache module等好幾種客戶(hù)端示例,你還可以根據
需要實(shí)現一個(gè)自己的客戶(hù)端,非常簡(jiǎn)單!~
下面我們以tomcat 5.0 作為CAS Server(server1),另外一臺tomcat5.0 為client(client1)
為例進(jìn)行說(shuō)明。
1.下載cas-server和cas-client(可選,建議使用)
http://www.yale.edu/tp/cas/cas-server-2.0.12.zip
http://www.yale.edu/tp/cas/cas-client-2.0.11.zip
2.將cas-server-2.0.12.zip解壓,并將lib/cas.war拷貝到server1的webapps下
3.產(chǎn)生SERVER的證書(shū)
keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file
4.在server1配置tomcat使用HTTPS
$CATALINA_HOME/conf/server.xml里
<Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https"
secure="true">
<Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory"
keystoreFile="/path/to/your/keystore-file"
keystorePass="your-password" clientAuth="false" protocol="TLS" />
</Connector>
5.在要使用CAS的客戶(hù)端client1里設置(以servlets-examples這個(gè)APP為例),我們使用
ServletFilter(CAS client里提供的)來(lái)實(shí)現SSO的檢查。
修改servlets-examples/WEB-INF/web.xml
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>your.client.server.name(eg:client1):port</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
6.將cas-client-2.0.11.zip解壓,把java/lib/casclient.jar拷貝到client1服務(wù)器上的
webapps/servlets-examples/WEB-INF/lib目錄下(如果沒(méi)有就建一個(gè))
7.導出SERVER的證書(shū),用來(lái)給所有需要用到的客戶(hù)端導入
keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file
8.在客戶(hù)端的JVM里導入信任的SERVER的證書(shū)(根據情況有可能需要管理員權限)
keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name
9.test & done.
把server1和client1分別起來(lái),檢查啟動(dòng)的LOG是否正常,如果一切OK,就訪(fǎng)問(wèn)
http://client1:8080/servlets-examples/servlet/HelloWorldExample
系統會(huì )自動(dòng)跳轉到一個(gè)驗證頁(yè)面,隨便輸入一個(gè)相同的賬號,密碼,嚴正通過(guò)之后就會(huì )訪(fǎng)問(wèn)
到真正的HelloWorldExample這個(gè)servlet了
更多信息請參考
http://www.yale.edu/tp/cas/
http://www-106.ibm.com/developerworks/web/library/wa-singlesign/
聯(lián)系客服