一:前言
这次主要是介绍如何通过配置,使已经登录到域的域用户,在访问CAS_Client的时候,不需要再次去CAS服务端认证的配置文档。是只针对已经掌握如何配置Windows_AD和CAS_SSO的相关人员。配置Windows_AD和CAS_SSO的方法请参考其它手册,本文不再讲述如何配置Windows_AD和CAS_SSO。
本人所讲述的配置都是在Windows_AD和CAS_SSO已经配置完成的基础上。
经过测试,无配置经历的开发人员通过此文档都可顺利配置成功。
因时间问题,关于环境的网络拓扑结构就没有画,在这简单描述一下具体的环境:
域控制器一台,CAS服务器一台,客户机一台,如果有条件,可以单独设立一台业务系统主机(CAS_Client),所有机器均加入域控制器中。
具体效果如下:
1:用户使用客户机登录到域中,首次访问业务系统(Cas_Client),无需认证,直接进入业务系统,身份为登录域的账号。
2:用户使用客户机登录到本机,首次访问业务系统(Cas_Client),转向CAS的认证界面(默认的认证方式为表单认证),输入账号口令后进入业务系统。
从这个效果中就可以看出来,CAS与AD集成后,用户只需要认证一次。
CAS版本:3.4.2
二:配置域信息
1:域控制器版本
本文所提到的AD域环境为WINDOWS2003版本的域控制器
2:在Windows AD中创建用户
A、启动域用户管理:开始→管理工具→Active Director用户和计算机。
B、创建用户:Users→右键→新建→用户。
C、添入要创建的用户信息,比如是“RainTime”:“姓:RainTime;姓名:RainTime;用户登录名:HTTP/RainTime;用户登录名(Windows 2000以前版本):RainTime”。
D、输入密码,并选择“密码永不过期”,比如是:111111
E、点击确定,完成用户创建。
三:配置CAS服务端
1:修改login-webflow.xml配置文件
A、login-webflow.xml在CAS目录下的WEB-INF文件夹下。
B、在此配置文件中加入以下两个标签
<action-state id="startAuthenticate">
<action bean="negociateSpnego" />
<transition on="success" to="spnego" />
</action-state>
<action-state id="spnego">
<action bean="spnego" />
<transition on="success" to="sendTicketGrantingTicket" />
<transition on="error" to="viewLoginForm" />
</action-state>
需要注意的是:如果你使用的是spring-webflow-2.0.xsd,那么应该将<action bean="" />替换为<evaluate expression="" />
C、修改login-webflow.xml的<decision-state id="gatewayRequestCheck">和<decision-state id="renewRequestCheck">两个标签,将两个标签属性中的“viewLoginForm”修改为“startAuthenticate”。
2:修改CAS的cas-servlet.xml配置文件
A、cas-servlet.xml在CAS目录下的WEB-INF文件夹下。
B、在cas-servlet.xml文件加入如下图所示的两个标签:
<bean id="negociateSpnego" class="org.jasig.cas.support.spnego.web.flow.SpnegoNegociateCredentialsAction" />
<bean id="spnego" class="org.jasig.cas.support.spnego.web.flow.SpnegoCredentialsAction">
<property name="centralAuthenticationService" ref="centralAuthenticationService"/>
</bean>
3:修改CAS的deployConfigContextxml配置文件
A、deployerConfigContext.xml在CAS目录下的WEB-INF文件夹下。
B、修改该文件bean标签“authenticationManager”的两个属性“credentialsToPrincipalResolvers”和“authenticationHandlers”。
首先在“credentialsToPrincipalResolvers”属性的list标签中加入一个bean标签:
<bean class="org.jasig.cas.support.spnego.authentication.principal.SpnegoCredentialsToPrincipalResolver" />
然后在“authenticationHandlers”属性list标签中也加入一个bean标签:
<bean class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSSpnegoAuthenticationHandler">
<property name="authentication">
<bean class="jcifs.spnego.Authentication" />
</property>
<property name="principalWithDomainName" value="false" />
<property name="NTLMallowed" value="true"/>
</bean>
c、退出authenticationManager,在外层加入一个标签bean:"jcifsConfig ":
<bean name="jcifsConfig" class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSConfig">
<property name="jcifsServicePrincipal" value="HTTP/[email protected]" />
<property name="jcifsServicePassword" value="the.service.password.here" />
<property name="kerberosDebug" value="false" />
<property name="kerberosRealm" value="YOUR.REALM.HERE" />
<property name="kerberosKdc" value="THE.KDC.IP.HERE" />
<property name="loginConf" value="/path/to/WEB-INF/login.conf" />
</bean>
jcifsServicePrincipal:登录域控制器的完整登录名
jcifsServicePassword:登录域控制器的密码
kerberosDebug:是否输出DEBUG信息
kerberosRealm:域名
kerberosKdc:Kdc地址(域控制器地址)
loginconf:login.conf文件的绝对路径
4:创建login.conf配置文件
jcifs.spnego.initiate {
com.sun.security.auth.module.Krb5LoginModule required storeKey=true;
};
jcifs.spnego.accept {
com.sun.security.auth.module.Krb5LoginModule required storeKey=true;
};
5:添加所需要的JAR包
A、将cas-server-3.4.2-release\cas-server-3.4.2\modules目录的cas-server-support-spnego-3.4.2.jar复制到cas\WEB-INF\lib下
B、还需要有两个外部包的支持,“jcifs-1.1.11.jar、jcifs-ext-0.9.4.jar”,将这两个jar包也拷贝到cas\WEB-INF\lib下
四:配置客户机
A、 将CAS服务地址配置成可信任站点:“Internet选项→安全→本地Internet→站点→高级” 输入CAS服务地址,如“http://cas.test.com”,点击确定即可。
五:测试
使用客户机登录到域中,账号为"RainTime",密码是“111111”,然后访问业务系统,如果无需认证直接进入业务系统,表明SPNEGO认证已经通过,否则请重新检查整个配置是否无误。
下一步的工作是配置CAS的X509证书认证和基于CAS认证的FreeRadius认证
写这篇文章浪费了一上午时间,不知是这个在线编辑器的问题还是我的浏览器问题,在插入代码后,就不能修改,否则格式就乱了套了,没办法,凑合着看吧。
注:罪过罪过,官方提供的资料是在Linux下部署成功的,而CAS的一些配置也是针对linux系统使用的,如果CAS部署在WINDOWS下全完可以不这么麻烦