单点登录(SSO):如何使用Active Directory作为CAS服务的身份验证方法?

mic*_*ico 12 cas active-directory single-sign-on

我正在开发Liferay的门户网站,并希望在那里应用单点登录机制(SSO).我正在使用Jasig CAS对我的多个Web应用程序进行集中身份验证.到目前为止,我知道我可以使用CAS作为身份验证方法,但下一步是添加更多智能并从Active Directory服务器请求身份验证.

这可以通过使用AD作为进行身份验证的"数据库"来实现,但我是新手,并且不知道如何使用Jasig CAS.

有任何线索如何完成这项任务?

小智 28

我在这里做了一些假设,所以如果我偏离目标,请告诉我:

  1. 您使用的是3.3.2和3.4.8之间的CAS版本.
  2. 您希望使用绑定LDAP处理程序通过LDAP(对​​于Kerberos或SPNEGO,请参阅下面的参考)将CAS绑定到Active Directory(对于FastBind,请参阅下面的参考资料).
  3. 您熟悉通过Maven从源代码构建CAS.

条件

  • 如果要通过"ldaps://"(而不是"ldap://")绑定到AD,则CAS服务器上的JVM需要信任Active Directory服务器的SSL证书.如果您使用AD的自签名证书,则需要将其导入JVM的信任库.

摘要

在CAS源代码树中,您需要更改以下文件:

  • CAS-服务器的webapp /的pom.xml
  • CAS-服务器的web应用/ SRC /主/ web应用/ WEB-INF/deployerConfigContext.xml里

细节

pom.xml中:

添加以下内容<dependencies>:

<!-- LDAP support -->
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>cas-server-support-ldap</artifactId>
    <version>${project.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

deployerConfigContext.xml里:

  1. 重新配置身份验证加入者:

    • 寻找:<property name="authenticationHandlers">.在里面这是一个<list>,在里面这是(可能)两个<bean ...>元素
    • 保持这一个:

      <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />
      
      Run Code Online (Sandbox Code Playgroud)
    • 另一个<bean>(可能)可能对应于您正在使用的当前身份验证方法.(我不清楚基于这个问题,因为CAS可以通过多种方式在不使用外部服务的情况下执行此操作.默认值为SimpleTestUsernamePasswordAuthenticationHandler,只要用户名等于密码,就会进行身份验证).替换<bean>为:

      <!-- LDAP bind Authentication Handler -->
      <bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler">
      <property name="filter" value="uid=%u" />
          <property name="searchBase" value="{your LDAP search path, e.g.: cn=users,dc=example,dc=com}" />
          <property name="contextSource" ref="LDAPcontextSource" />
          <property name="ignorePartialResultException" value="yes" /> <!-- fix because of how AD returns results -->
      </bean>
      
      Run Code Online (Sandbox Code Playgroud)
    • 根据AD配置修改"searchBase"属性.

  2. 为LDAP创建上下文源:

    • 在根<beans>元素中的某处添加:

      <bean id="LDAPcontextSource" class="org.springframework.ldap.core.support.LdapContextSource">
          <property name="pooled" value="false"/>
          <property name="urls">
              <list>
                  <value>{URL of your AD server, e.g.: ldaps://ad.example.com}/</value>
              </list>
          </property>
          <property name="userDn" value="{your account that has permission to bind to AD, e.g.: uid=someuser, dc=example, dc=com}"/>
          <property name="password" value="{your password for bind}"/>
          <property name="baseEnvironmentProperties">
              <map>
                  <entry>
                      <key>
                          <value>java.naming.security.authentication</value>
                      </key>
                      <value>simple</value>
                  </entry>
              </map>
          </property>
      </bean>
      
      Run Code Online (Sandbox Code Playgroud)
    • 相应地修改"urls","userDn"和"password".

重建cas-server-webapp并试一试.

参考文献:

  • +1:完美答案!当我有时间编码时,我会检查这是如何制作的.千恩万谢! (3认同)