SSO之CAS+LDAP实现单点登录认证

目录:

  1. 概述
  2. 详细步骤
    • LDAP安装配置
    • CAS基础安装配置
    • CAS整合LDAP的配置

[一]、概述

本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤。

[二]、详细步骤

1、LDAP安装配置 详见:图文介绍openLDAP在windows上的安装配置

安装配置,添加部分测试数据如下:

 2、CAS的基础安装配置:SSO之CAS单点登录实例演示

 3、CAS整合LDAP的配置

如果是Mave构建项目的,添加LDAP的相关依赖:

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 的配置:

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的配置,修改成如下:

配置好后分别启动三个应用: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 的配置:

在<bean id=”authenticationManager” />修改认证bean的配置,修改成如下:

配置好后分别启动三个应用:tomcat-cas、tomcat-app1、tomcat-app2,进行认证测试:

  • 输入Michael/dev4me 或者 dev001/dev001 可以成功登录,
  • 输入Michael/test4me 或者 test001/test001 也可以成功登录
如果把参数:searchBase的值修改为:”ou=dev,dc=micmiu,dc=com”,重新启动测试认证的结果如下:
  • 输入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/

发表评论?

22 条评论。

  1. 楼主你好,我想问下,这个michael是哪里配置的?

  2. 楼主 我这边搭建的是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

  3. 我新增用户的时候密码是111111,但是用这个不能登录,请问是什么原因呢?

  4. 为什么第二种BindLdapAuthenticationHandler 的方法每次输入用户名和密码都行不通呢,第一种方法FastBindLdapAuthenticationHandler可以用

    • 我log文件里报的错是javax.naming.AuthenticationException: [LDAP: error code 49 – Invalid Credentials],不过现在解决了,是我密码password写错了,谢谢楼主的文章。

  5. 实在是解决不了了,按照楼主的方法配置好了所有步骤,到了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,真是太粗心了。我这种写法可能是老版本吧,换成楼主这种写法就行了。谢谢

  6. 谢谢楼主的帖子,很好很强大… :mrgreen:

  7. cas能同时配置jdbc和ldap吗?我这边的认证有jdbc和ldap的,但尝试配置了后,只能支持一种ldap,要么就jdbc,这应该不正常吧,应该是能同时支持多种的吧?求教下 🙂

  8. LZ,配置之前CAS的登录界面能打开,配置好后就报404,tomcat启动的时候也没异常,请帮忙解决下!

  9. 你好,请问如何用cas获取已获得ldap节点的子节点

回复给 debug ¬
取消回复


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">