1.概述

本文先配置了SPNEGO认证,就是如果用户操作系统如果登陆了公司的Windows域,用户浏览器访问应用服务即可免登录。

然后如果不在域里的员工,用LDAP认证方式,输账号密码登陆。


域控服务器用的Windows Server2008。

CAS用的3.6.0。

CAS Server部署在CentOS6上。

关于CAS的添加依赖及编译,参考  

本文只添加了LDAP依赖和 SPNEGO依赖,也没有用commons-pool。

 

2.配置SPNEGO

从编译后把war包放到tomcat开始说起。

把war包放到tomcat执行后,关闭tomcat。

2.1 创建keytab文件

在AD服务器(Windows Server2008)上,在目录下创建一个User用于查询:

密码要求永不过期

2008上不要勾选DES encryption

2003上可以勾选DES encryption,勾选玩重置一下密码

 

打开 命令行提示程序(管理员)。

输入以下命令:

2.1.1.注册spn

setspn -S HTTP/<wls-server-name>@<REALM-NAME><account_name> 

其中: 

<wls-server-name> 是CASServer的主机,可以ping通的那种,比如 cas.abcd.com

<REALM-NAME>

<account_name>

LDAP认证部署 ldap认证配置_LDAP认证部署

 2.1.2.生成keytab

ktpass.exe /out myspnaccount.keytab /princ HTTP/<wls-server-name>@<REALM-NAME>  /pass ***** /mapuser@<REALM-NAME>

按第一步说的替换一下,就会在当前目录下生成keytab文件。

把文件放到CAS Server上,CAS Server不能放在域控上。

生成果keytab ,账号信息就会变了:

这个图中的 HTTP/**********  就是我们要放到CAS配置中的参数

2.2 测试SPN账号

编辑文件/etc/krb5.conf

#######################################################

[logging]

 default = FILE:/var/log/krb5libs.log

 kdc = FILE:/var/log/krb5kdc.log

 admin_server = FILE:/var/log/kadmind.log

 

[libdefaults]

 ticket_lifetime = 24000

 default_realm = YOUR.REALM.HERE

 default_keytab_name = /home/cas/kerberos/myspnaccount.keytab

 dns_lookup_realm = false

 dns_lookup_kdc = false

 default_tkt_enctypes = rc4-hmac

 default_tgs_enctypes = rc4-hmac

[realms]

 YOUR.REALM.HERE = {

  kdc = your.kdc.your.realm.here:88

 }

 

[domain_realm]

 .your.realm.here = YOUR.REALM.HERE

 your.realm.here = YOUR.REALM.HERE

#######################################################

根据需求改一下配置

your.kdc.your.realm.here  这个是刚刚生成keytab的主机 浏览器和CAS 服务器都能ping通

YOUR.REALM.HERE  大写域名

your.realm.here 小写域名

 

测试命令有两种,挑一种:

kinit -V HTTP/your.server.name.here@YOUR.REALM.HERE -k -t /home/cas/kerberos/myspnaccount.keytab

这样就成功了:

 

#######################################################

[root@srmdev ~]# kinit -V HTTP/cas.abcd.com@ABCD.COM  -k -t /data/webapps/cas/myspnaccount.keytab

Using default cache: /tmp/krb5cc_0

Using principal: HTTP/WIN-BS98PMC2RI1.srmtest.local@SRMTEST.LOCAL

Using keytab: /data/webapps/cas/myspnaccount.keytab

Authenticated to Kerberos v5

[root@srmdev ~]#

#######################################################

 

2.3 修改CAS配置

这部分内容比较多,参考概述中说的 SPNEGO 官方文档的 “Set Up CAS”部分去配置吧

记得遇到 Collapse source这样的要点开看,里面是详细的修改对比:

LDAP认证部署 ldap认证配置_HTTP_02

挑几个容易出错的地方说一下:

2.3.1

注意标签添加的位置

2.3.2

authenticationHandlers属性中 先 只留一种处理方式

LDAP认证部署 ldap认证配置_tomcat_03

 2.3.3

这是deployerConfigContext.xml的一段配置,拿出来做参考        

<bean name="jcifsConfig" class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSConfig">

          <property name="jcifsServicePrincipal" value="HTTP/cas.abcd.com@ABCD.COM" />

          <property name="kerberosDebug" value="true" />

          <property name="kerberosRealm" value="ABCD.COM" />

          <property name="kerberosKdc" value="192.168.0.2" />

          <property name="loginConf" value="/u01/cas//tomcat/webapps/cas/WEB-INF/login.conf" />

        </bean>

 

2.4 浏览器设置

用户浏览器需要做的配置:

IE:

   打开IE,选择 Internet选项。

LDAP认证部署 ldap认证配置_HTTP_04

选择高级,选择“启动Windows集成认证”。

LDAP认证部署 ldap认证配置_HTTP_05

选择“安全”—“本地Internet”—“站点”

LDAP认证部署 ldap认证配置_LDAP认证部署_06

然后输入cas服务的地址

LDAP认证部署 ldap认证配置_bc_07

保存后重启浏览器。保存“启动Windows集成认证”要重启电脑。

FireFox:

在地址栏输入:about:config 

找到 network.negotiate-auth.trusted-uris,点击修改

输入CAS服务的地址加端口,默认80或443端口就不填

保存后重启浏览器。

Chrome用的IE的配置,IE能用理论上Chrome也能用。

2.5 测试

在已经登录到域的操作系统中测试

访问CAS服务:(不能用IP访问)

比如访问 https://cas.abcd.com:8443/cas

 

3.配置域认证失败跳转到项目的登陆页面

(没这需求的这部分可不看)

修改cas应用下 WEB-INF/view/jsp/default/ui/casLoginView.jsp 这个文件。

或者把原来的casLoginView.jsp重命名为casLoginView.jsp.bkp

把原来的casLoginView.jsp删掉,新建一个casLoginView.jsp

内容是:

#######################################################

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.io.*,java.util.*" %>

<html>

<html>

<head>

<title>页面重定向</title>

</head>

<body>

<h1>页面重定向</h1>

<%

   String site = new String("https://app.abcd.com/login");

   response.setStatus(response.SC_MOVED_TEMPORARILY);

   response.setHeader("Location", site);

%>

</body>

</html>

 #######################################################

红色字体为修改的跳转地址。

保存,重启tomcat生效。

 

4.加入LDAP认证

(没这部分需求可以不看。)

需求希望域认证失败跳转到账号密码登陆。

打开deployerConfigContext.xml

在authenticationHandlers里,在<list></list>标签对中,在刚刚添加的SPNEGO认证下,添加:

#######################################################

<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler"

  p:filter="sAMAccountName=%u"

      p:searchBase="dc=abcd,dc=com"

      p:contextSource-ref="contextSource"

      p:ignorePartialResultException="true" />

#######################################################

改一下searchBase后面的参数

 

在deployerConfigContext.xml的末尾,</beans>之前,添加

#######################################################
        <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="pooled" value="false"/>
    <property name="urls">
        <list>
                <value>ldap://192.168.0.2:389</value>
               <value>ldap://192.168.0.3:389</value>
        </list>
    </property>
    <property name="userDn" value="abcd\cas_sso"/>
    <property name="password" value="123456#"/>
    <property name="baseEnvironmentProperties">
        <map>
              <entry key="com.sun.jndi.ldap.connect.timeout" value="3000" />
              <entry key="com.sun.jndi.ldap.read.timeout" value="3000" />
              <entry key="java.naming.security.authentication" value="simple" />
        </map>
    </property>
    </bean>
#######################################################

改一下参数。

 

在authenticationManager标签内的最后一个 <property> </property>标签下添加一个property:

#######################################################
<property name="authenticationMetaDataPopulators">
   <list>
       <bean class="org.jasig.cas.authentication.SamlAuthenticationMetaDataPopulator" />
   </list>
 </property>
#######################################################

    

 

完。