1.概述

本文先配置了SPNEGO认证,就是如果用户操作系统如果登陆了公司的Windows域,用户浏览器访问应用服务即可免登录。
然后如果不在域里的员工,用LDAP认证方式,输账号密码登陆。
参考文档:
域控服务器用的Windows Server2008。
CAS用的3.6.0。
CAS Server部署在CentOS6上。
关于CAS的添加依赖及编译,参考  https://www.cnblogs.com/gracehans/p/6144763.html
本文只添加了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> 是域的名字,比如 ABCD.com
<account_name>  是刚刚创建的用户名

2.1.2.生成keytab

ktpass.exe /out myspnaccount.keytab /princ HTTP/<wls-server-name>@<REALM-NAME>  /pass ***** /mapuser <account_name>@<REALM-NAME>  /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT 
按第一步说的替换一下,就会在当前目录下生成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这样的要点开看,里面是详细的修改对比:

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

2.3.1

注意标签添加的位置

2.3.2

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

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选项。

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

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

然后输入cas服务的地址

保存后重启浏览器。保存“启动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>
#######################################################
    
 
完。

No.2 CAS之SPNEGO+LDAP认证配置的更多相关文章

  1. centos下svn的ldap认证配置

    前提:完成svn的基本安装 一.安装sasl相关组件 #yum install -y cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain 二.查看SASL版本和提供的 ...

  2. gitlab、openvpn配置ldap认证

    gitlab配置ldap认证: vim /etc/gitlab/gitlab.rb 添加以下内容: gitlab_rails['ldap_enabled'] = true gitlab_rails[' ...

  3. 本地docker搭建gitlab, 并配置ldap认证

    基于Docker在Mac OS X系统中的部署和设置GitLab的具体过程如下:   1. 安装Docker for Mac (参见https://docs.docker.com/docker-for ...

  4. cas单点登录-jdbc认证(三)

    前言 本节的内容为JDBC认证,查找数据库进行验证,其中包括: 密码加密策略(无密码,简单加密,加盐处理) 认证策略(jdbc) 一.业务需求 不同的公司,需求业务需求或者架构不一样导致我们实现验证的 ...

  5. Jenkins-配置LDAP认证

    Jenkins-配置LDAP认证 参考文档: LDAP添加用户详见我的博文  Linux分类 中的< LDAP2-创建OU和用户>博文. 1.LDAP配置 1.准备一个adminDN账号用 ...

  6. LDAP认证模式简介

    今天发现公共服务中有ldap数据库服务,先大概了解一下ldap,转载下面的文章.原文链接:https://www.jianshu.com/p/d3f8c8f5d661 另外记录一篇文章地址:https ...

  7. 自学Aruba5.3.3-Aruba安全认证-有PEFNG 许可证环境的认证配置Captive-Portal

    点击返回:自学Aruba之路 自学Aruba5.3.3-Aruba安全认证-有PEFNG 许可证环境的认证配置Captive-Portal 1. Captive-Portal认证配置前言 1.1 新建 ...

  8. 自学Aruba5.3.4-Aruba安全认证-有PEFNG 许可证环境的认证配置802.1x

    点击返回:自学Aruba之路 自学Aruba5.3.4-Aruba安全认证-有PEFNG 许可证环境的认证配置802.1x 1. 采用InterDB认证服务器完成802.1X认证 (Aruba650) ...

  9. 搭建harbor仓库、LDAP认证

    ldap: 192.168.199.177 c5game.com 宿主机:192.168.199.224 测试客户机:192.168.199.223 安装docker.docker-compose 访 ...

随机推荐

  1. Linux下配置Node.js环境

    1.下载代码 下载地址:https://nodejs.org/en/download/ 下载Linux Binaries (.tar.xz)版本,位数根据操作系统位数选择 2.复制代码包 用FTP上传 ...

  2. flume坑之channel.transactionCapacity和HdfsSink.batchSize

    不说过程了,直接说结果!一对相连接的channel-HdfsSink,无意间配置如下:...agent.channels.common-channel.transactionCapacity=10.. ...

  3. MySQL之远程登录配置

    1.注释掉mysql配置文件中的这一行:#bind-address  = 127.0.0.1 2.给指定服务器的用户授权:GRANT ALL PRIVILEGES ON *.* TO root@&qu ...

  4. js字符串和正则表达式中的match、replace、exec等的配合使用

    正则并不是经常使用,而正则和字符串之间的函数关系又错综复杂,谁是谁的函数,又是怎么样的一种结果,往往我们是看一遍忘一遍,对此我是头疼不已,感觉自己是个笨蛋^_^. 为了以后不再查文档,特此把常用的函数 ...

  5. 使用curl传递cookie错误的问题

    工作中发现一个问题, 通过curl调用接口传递cookie操作用户的数据, 接口的程序解析不了cookie中的数据. 经过排查发现curl发送的cookie数据为 TZ+Gn+rEk+6G4d 而接口 ...

  6. Vue2.X的状态管理vuex记录

    记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method   -- ...

  7. XmlHelper

    获取XML节点的值(http服务使用xml传输数据,节点名称唯一) /// <summary> /// 获取xml节点的值 /// </summary> /// <par ...

  8. delphi中线程应用之Synchronize

    当一个线程在使用时,如果这个函数使用了Synchronize修钸的话就不允许别一个线程来调用这个函数,它的目的是避免多个子线程同时访问主线程资源.示例:procedure TTaskThread.Sh ...

  9. 书旗小说app点评

    书旗小说这个手机软件用了好久了,大一的时候就开始用,业余无聊时间可以看一看网络小说打发一下时间. 书旗免费小说是一款内容以免费小说书旗网为基础的在线阅读器,除了拥有传统阅读器的书籍同步阅读.全自动书签 ...

  10. windows8.1下javaweb环境搭建及基本配置(jdk+tomcat+eclipse)

    1.下载安装jdk在无空格的路径下,否则在linux下可能出问题.配置环境变量: a.新建系统变量——JAVA_HOME,值——D:\programming\java\jdk8 // win8下若建为 ...