2009年2月2日 星期一

如何配置使用CAS的PHP客户端

近段时间不断有从事PHP开发的朋友,询问我如何配置CAS的PHP客户端。由于工作关系我不能一一给予答复特写此篇文章。

首先很抱歉,由于个人业余时间都在照顾小宝宝,所以很久都没有给回复,酝酿如此之久才写。

在则由于公司管理比较严格,无法拿到当初项目使用CAS时候写下的几篇文档,因此只能先给大家一些文字的大纲,而无法图文并茂了。

整个配置过程我划分成四步骤:

1、准备CAS的PHP库和相关库文件

  1)到CAS的网站下载文件phpcas-0.60-rc7.zip

  2) 由于其用到了PEAR的DB库,需要到PEAR网站去下载。

     下载文件PEAR-1.7.1.tgz和DB-1.7.13.tgz 也可在google上搜索。

      当然不一定是我说的版本,但我给的是我试验成功的版本。

  3) 用于使用到了SSL所以需要下载openssl。当然我是在windows环境下试验的,下载的是

其的windows版本。

  4)安装openssl。

2、配置PHP环境

   1)将phpcas-0.60-rc7.zip解压,我们选在了PHP环境的include目录。在其下建立cas将文件解压进去。

   2)同理将PEAR-1.7.1.tgz和DB-1.7.13.tgz解压,也分别建立pear和db两个目录。

   3)修改php环境的ini文件,一般是php.ini文件。将我们前两步骤建立的目录加入到include_path中。根据安装环境修改对应的unix或windows项。

    4)由于phpcas用到了CURL(用于连接ssl)和DOMXML(用于处理CAS服务器返回的消息)两个组件,因此需要保证php解释环境需要有这两个扩展。需要做的就是修改ini文件将extentions节下的屏蔽符号去掉,然后就是检查PHP环境的extentions目录下是否有对应的.dll或.o文件。一般标准安装都会有。

3、测试CAS的php客户端

  1)前面做完后,应该比较激动了,很想看看php程序到底能不能访问CAS呢。

  2)在phpcas-0.60-rc7.zip中的docs/examples中有几个测试程序。当然我们先前解压的目录下也有。

  3)我们只是看一下通了没有,因此拷贝example_simple.php文件到apache的htdocs下。具体根据你的web服务器配置。总之目的就是能通过浏览器访问example_simple.php。在用之前需要修改

example_simple.php文件,主要是要修改里面关于CAS服务器配置信息,修改代码中的phpCAS::client(...)这一句。整个方法意义如下:

phpCAS::client(CAS_VERSION_2_0,'服务地址',端口号,'cas的访问地址');

将自己的服务地址和端口号和cas的相对服务地址的url填如就可以了,例如:phpCAS::client(CAS_VERSION_2_0,'localhost',8443,'cas');表示可以通过http://localhost:8443/cas访问到CAS服务。

 4)在浏览器里试验一下吧,没有意外的话会看到CAS的登录界面。这就表示配通了。

4、根据项目需要修改对应的PHP代码,加入对CAS的调用,将用户登录交给CAS我们只需处理对应的用户,在PHP程序中的权限问题了。对于旧有就有的PHP代码只需要用访问CAS服务换掉验证用户身份部分就可以了。

  调用CAS关键性代码:

include_once('CAS.php');
//可以不用,用于调试,可以通过服务端的cas.log看到验证过程。
phpCAS::setDebug();

// 初始化phpcas
phpCAS::client(CAS_VERSION_2_0,'服务地址',端口号,'cas的访问地址');
例如:phpCAS::client(CAS_VERSION_2_0,'localhost',8443,'cas');

// 不使用SSL服务校验
phpCAS::setNoCasServerValidation();

// 访问CAS的验证
phpCAS::forceAuthentication();

这时候就验证完毕了
获得用户名可以通过phpCAS::getUser()

//登出
if (isset($_REQUEST['logout'])) {
  phpCAS::logout();
}


   当然CAS除了它默认的登录界面和校验逻辑,还是允许自行定义的。

如何自定义登录界面,后续在谈。

2008年11月17日 星期一

领域语言设计要素畅想 1

1、贴近领域
  专注于核心领域的应用问题,语法模型应该贴近领域,而不是通用语言。
  如SQL就是一种很多懂点技术的各个行业高手的必备语言。  


2、基本的运算
  不需要十分强大的运算功能,强大的计算功能交给擅长干这个的语言吧,我们要做的只是用。
但是基本的还是要支持的。


3、合适的类型
  类型不要那么通用和齐全,但必须贴近领域模型,否则还需要做封装,那就太对不起创造领域语言的初衷了,起码说明设计的不够纯粹,和定位的模糊。


4、技术的封装屏蔽
  那些和领域不相关的,但是却是支持领域应用开发的技术,一律屏蔽掉,做为基本的元素直接引用。

2007年12月24日 星期一

单应用时候使用CAS的配置步骤

配置使用CAS的步骤,一定要记住。


环境:tomcat5.5、cas-server-3.1.1-release,客户端jar直接使用的是cas-server-3.1.1.war中的casclient2.11



过程图:






1、使用keytool生成自己的key.

1)服务器中生成证书:keytool -genkey -alias tomcat -keystore c:\mykeystore
2) 导出证书,由客户端安装: keytool -export -alias tomcat -keystore c:\mykeystore -file c:\mycerts.cer
注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost。
3) 客户端配置:
将服务器下发的证书导入到JVM中
keytool -import -trustcacerts -alias tomcat -file c:\mycert.cer
-keystore %JAVA_HOME%/JRE/LIB/SECURITY/CACERTS



注意:要导入到jvm中,导入到%java_home%/jre/lib/security/cacerts文件中。如果报异常,可以有多种解决方法,本人在配置的时候总是在最后报IO错误,换文件名就ok,最后采取删除该文件:)暴力了点。呵呵。


2、使用tomcat的话,将生成的key文件拷贝到tomcat的conf目录下。记得一定要打开SSL,在server.xml中去掉注释,加入keystorePass="我的密码" keystoreFile="conf/文件名称"。


3、将casxxxx.war拷贝到tomcat的webapps目录下。


想将log日志级别改变的话,等其被tomcat展开后到其的WEB-INF/classes目录下修改log.properties文件(参考log4j的配置)


4、修改要试验需要增加验证的服务的web.xml文件。并把cas的客户端jar包拷贝进去,就是casclient-2.1.1.jar(cas/WEB-INF/lib目录下)拷贝到目标服务的WEB-INF/lib目录下,没有的话就建一个。


我是使用jsp-examples,修改WEB-INF中的web.xml文件在其filter的前面加入





<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://localhost:8443/cas/login</param-value>
</init-param>
<init-param>

<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://localhost:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>

<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>
localhost:8080</param-value>
</init-param>


</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>
/*</url-pattern>
</filter-mapping>


5、启动tomcat看看效果了。在浏览器中输入http://localhost:8080/jsp-examples,


将会看到CAS的简单登录界面。输入完用户名密码(用户名要和密码相同),就进入原先的jsp-exmaples页面了。



问题:


异常:Unable to validate ProxyTicketValidator。


一般原因:1、证书使用的是域名,而在配置跳转的时候给的是IP.


2、导入到jvm中的证书导入失败或未导入到 cacerts中。本人开始就是这个原因。







Technorati :

我的博客,我做主

现在终于开始考虑写写博客了。
具体写点什么还没有想好,不过有个地方总好过无处发表的好。