目录:
- 概述
- 详细步骤
- LDAP安装配置
- CAS基础安装配置
- CAS整合LDAP的配置
[一]、概述
本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤。
[二]、详细步骤
1、LDAP安装配置 详见:图文介绍openLDAP在windows上的安装配置
安装配置,添加部分测试数据如下:
2、CAS的基础安装配置:SSO之CAS单点登录实例演示
3、CAS整合LDAP的配置
如果是Mave构建项目的,添加LDAP的相关依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support-ldap</artifactId> <version>${cas.version}</version> </dependency> <!-- 仅仅在使用到连接池时添加该依赖 <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>${apache.commons.pool.version}</version> </dependency> --> |
ps:也可以在官网下载的发布包的目录 modules/ 下找到类似cas-server-support-ldap-3.4.11.jar 的包。
LDAP认证配置有两种:
[第一种]、FastBindLdapAuthenticationHandler
这种认证处理器一般用于DN是由用户名直接组成的,比如:uid=%u,ou=dev,dc=micmiu.com,dc=com ,其中 %u 就是CAS登录的用户名。
修改web的配置文件 WEB-INF\deployerConfigContext.xml:
首先在<beans>跟节点下增加bean:ContextSource 的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="pooled" value="false"/> <property name="url" value="ldap://192.168.8.150:389" /> <property name="userDn" value="cn=Manager"/> <property name="password" value="michael"/> <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> |
ContextSource 的配置说明:
- 如果有多个LDAP服务器,可以通过参数urls 配置多个
- FastBindLdapAuthenticationHandler配置时,这里的userDn 可以配置成 “cn=Manager,ou=dev,dc=micmiu,dc=com” 或 “cn=Manager,ou=dev” 或 “cn=Manager” 或 “Manager” 这四个都可以
- 如果LDAP服务器有SSL,注意url配置的前缀是ldaps:”ldaps://192.168.8.150:636″
在<bean id=”authenticationManager” />下找到SimpleTestUsernamePasswordAuthenticationHandler的配置,修改成如下:
1 2 3 4 |
<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler"> <property name="filter" value="uid=%u,ou=dev,dc=micmiu,dc=com" /> <property name="contextSource" ref="contextSource" /> </bean> |
配置好后分别启动三个应用:tomcat-cas、tomcat-app1、tomcat-app2,进行认证测试:
- 输入Michael/dev4me 或者 dev001/dev001 可以成功登录,
- 输入Michael/test4me 或者test001/test001 则登录失败。
[第二种]、BindLdapAuthenticationHandler
这种认证处理器一般用于需要验证的用户名是DN的其他的属性比如email,而不是上面第一种处理器中的uid(当然uid属性同样适用,下面我们配置的示例就还是用uid)。
修改web的配置文件 WEB-INF\deployerConfigContext.xml:
同样在<beans>跟节点下增加bean:ContextSource 的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="anonymousReadOnly" value="false" /> <property name="password" value="michael" /> <property name="pooled" value="true" /> <property name="urls"> <list> <value>ldap://192.168.8.150:389</value> </list> </property> <property name="userDn" value="cn=Manager,dc=micmiu,dc=com" /> <property name="baseEnvironmentProperties"> <map> <!-- LDAP SSL访问配置 <entry key="java.naming.security.protocol" value="ssl" /> --> <entry key="java.naming.security.authentication" value="simple" /> </map> </property> </bean> |
在<bean id=”authenticationManager” />修改认证bean的配置,修改成如下:
1 2 3 4 5 6 7 |
<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler"> <property name="filter" value="uid=%u" /> <property name="searchBase" value="dc=micmiu,dc=com" /> <property name="contextSource" ref="contextSource" /> <!-- 允许多个账号--> <property name="allowMultipleAccounts" value="true" /> </bean> |
配置好后分别启动三个应用:tomcat-cas、tomcat-app1、tomcat-app2,进行认证测试:
- 输入Michael/dev4me 或者 dev001/dev001 可以成功登录,
- 输入Michael/test4me 或者 test001/test001 也可以成功登录。
- 输入Michael/dev4me 或者 dev001/dev001 可以成功登录,
- 输入Michael/test4me 或者test001/test001 则登录失败。
此时的认证效果和第一种的认证效果是一样的。
有关连接池的配置可以参见官网介绍:https://wiki.jasig.org/display/CASUM/LDAP
本文介绍到此结束@Michael Sun.
原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]
本文链接地址: http://www.micmiu.com/enterprise-app/sso/sso-cas-ldap-auth/
楼主你好,我想问下,这个michael是哪里配置的?
楼主 我这边搭建的是https的 cas +ldap 但是 启动之后,在用户认证界面 提示提供的凭证有误,后台报错:
WHO: [username: ldaptest]
WHAT: error.authentication.credentials.bad
ACTION: TICKET_GRANTING_TICKET_NOT_CREATED
APPLICATION: CAS
这个信息比较少很难定位 可以配置debug模式 多点日志信息; 如果不是ldap 认证(数据库或者其他认证试试)是否有该问题?
楼主这个学习了,这个按照你的文档从头到尾学习下来,发现在contextSource 节点下 这个密码不应该是secret吗? 还有用你跳另外一个文章里面配置的LADP数据,我的这个Miumiu配置的密码是111111 ,但是无奈说进不去,您提供的凭证有问题,其他配置和楼主一样,跪求指导
后台日志:
WHO: [username: Miumiu]
WHAT: suplied credentials:[username:Miumiu]
ACTION: AUTHENTICATION_FAILED
APPLICATION: CAS
····
····
WHO: [username: Miumiu]
WHAT: error.authentication.credentials.bad
ACTION: TICKET_GRANTING_TICKET_NOT_CREATED
APPLICATION: CAS
我新增用户的时候密码是111111,但是用这个不能登录,请问是什么原因呢?
确认密码是否正确 已经密码加密结果是否一致
我新建用户的时候用的密码就是111111,加密结果在哪可以看到?
如果是ladp 新建用户,用一个ladp 工具就可以查看到了
为什么第二种BindLdapAuthenticationHandler 的方法每次输入用户名和密码都行不通呢,第一种方法FastBindLdapAuthenticationHandler可以用
我log文件里报的错是javax.naming.AuthenticationException: [LDAP: error code 49 – Invalid Credentials],不过现在解决了,是我密码password写错了,谢谢楼主的文章。
实在是解决不了了,按照楼主的方法配置好了所有步骤,到了CAS和LDAP整合部分一直不行,在deployerConfigContext.xml文件中修改完成后,http://localhost:8080/cas/login 就无法访问了,准确来说是cas无法启动,在tomcat启动的时候会报错,错误是:
Caused by: java.lang.ClassNotFoundException: org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:258)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1229)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1200)
… 62 more
这个是在启动tomcat的时发生的错误,我导了两个jar包到cas的lib里,分别是cas-server-support-ldap-3.4.2.1.jar和spring-ldap-1.2.1.jar,目前不会还不会使用Mave构建项目,所以没有进行相关配置。所以连直接进入都不行的话,就更不能通过别的应用程序跳入了,基础配置什么的应该都可以因为根据楼主的帖子SSO之CAS单点登录实例演示这一篇都测试成功了,加入LDAP就不行了,LDAP部分也是按照楼主的方法,配置成功。求教啊
这个错误提示很明显:org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource 类没有找到,
你最好确认下 tomcat下的webapp 中 lib库是否正确?
还有一点你配置的是非SSL? 我看你访问的是http而不是https。
嗯,我上网查过这个错误,但资料相当少,初步怀疑是spring-ldap-1.2.1 jar这个jar包里的类,但是换了几个版本都还是报相同的错误,其余还有什么jar包要导入的就不知道了,网上很多配置CAS+LDAP的资料里都只是提到了这两个包而已。我配置的是SSL,https的也是可以访问的,不过deployerConfigContext.xml文件修改后,http://localhost:8080/cas/login和https://localhost:8443/cas/login都不能访问了,准确来说是cas启动失败,所以访问这两个地址时都是404.启动时tomcat里报的就是这错Caused by: java.lang.ClassNotFoundException: org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource,网上的资料都是英文的,而且真心太少了。
已经发现错误的原因了,原来是我自己没有完全按照楼主的代码写,楼主是这么写的,而我是这么写的,所以一直报Caused by: java.lang.ClassNotFoundException: org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource,真是太粗心了。我这种写法可能是老版本吧,换成楼主这种写法就行了。谢谢
嗯,写法这么没显示出来,楼主的写法:
,我的写法是:
谢谢楼主的帖子,很好很强大…
cas能同时配置jdbc和ldap吗?我这边的认证有jdbc和ldap的,但尝试配置了后,只能支持一种ldap,要么就jdbc,这应该不正常吧,应该是能同时支持多种的吧?求教下 🙂
能不能多种认证我没有试验过,既然用cas做sso,也就意味着所有的系统单一的认证,为啥还有两张?你的应用场景很怪
LZ,配置之前CAS的登录界面能打开,配置好后就报404,tomcat启动的时候也没异常,请帮忙解决下!
404的时候 tomcat日志能给我看看么,不行就改成debug下的日志输出
知道怎么回事了,少了spring-ldap-core-1.3.1.RELEASE这个jar包
你好,请问如何用cas获取已获得ldap节点的子节点