可以使用两个LDAP配置一个Jasig CAS服务器

时间:2014-04-17 01:55:45

标签: ldap single-sign-on cas jasig

我们需要设置一个CAS服务器来对我们的应用程序进行SSO(所有这些都在JAVA中)。 这是我的情况:

  1. CAS1:现有CAS服务器,基于ORACLE LDAP(我们无法控制CAS1和LDAP)。我们打算忽略这个。 与CAS集成的几个应用程序。

  2. CAS2:我们计划基于MS Active Directory设置新的CAS服务器,因为我们有很多新用户。我们计划在AD中维持它们。 我们计划使用CAS2设置SSO的应用程序仍然相同。

  3. 我们需要的是来自现有LDAP和新AD的用户都可以通过SSO登录到应用程序。

    1. 是否有一种简单的方法,比如设置我的新CAS以同时使用LDAP和AD。因此双方用户都可以登录我们的应用程序。如果可能的话,这是我认为更好的方式。有详细的例子吗?

    2. 我可以在两个CAS之间设置联合吗? Jasig CAS有可能吗?

    3. 请帮忙!非常感谢!

1 个答案:

答案 0 :(得分:1)

是的,CAS可以针对多个来源进行身份验证。在authenticationManager bean中,您应该拥有一个名为authenticationHandlers的属性;在那里,定义多个AuthenticationHandler bean。对于我的设置,我有一个本地文件(用于监控来自Munin / Nagios的用户)身份验证处理程序和BindLdapAuthenticationHandler

<property name="authenticationHandlers">
    <list>
        <!-- This is the authentication handler that authenticates 
        services by means of callback via SSL, thereby validating 
        a server side SSL certificate. -->
        <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />
        <bean class="org.jasig.cas.adaptors.generic.FileAuthenticationHandler" p:fileName="${cas.localuser.file}" />
        <bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler"
            p:timeout="10000"
            p:filter="${ldap.auth.filter}"
            p:searchBase="${ldap.base.dn}"
            p:ignorePartialResultException="true"
            p:contextSource-ref="contextSource"
            p:searchContextSource-ref="searchContextSource"
        />
    </list>
</property>

只需为要进行身份验证的其他内容添加更多身份验证处理程序。查看{LDAP}处理程序的https://wiki.jasig.org/display/CASUM/LDAP和CAS Active Directory处理程序的https://wiki.jasig.org/display/CASUM/Active+Directory

它的工作方式,CAS将尝试按顺序对每个处理程序进行身份验证。成功的第一个成功导致CAS登录成功。因此,如果您在LDAP中使用uid = jsmith记录并且AD中的记录使用cn = jsmith并且它们都具有相同的密码,则在CAS中首先定义的任何一个都将赢得!因此,您应确保系统之间没有登录ID冲突,或者您可能会遇到一些不良副作用(特别是如果LDAP中的jsmith与AD中的jsmith不同)。

如果您使用SAML验证(例如mod_auth_cas),您可能还有其他注意事项。您可以定义一个attributeRepository bean,该bean列出了在进行身份验证时从人员记录中返回的属性,并且服务使用/samlValidate验证故障单。我不知道是否有可用的bean类允许你从多个目录中提取,但如果你没有使用samlValidate,这对你来说可能不是一个问题。

那么有更好的方法吗?好吧,如果可能,请崩溃到一个身份验证真相来源。

关于CAS联盟:没有。您可以设置服务器以便彼此信任对方的票证,但我建议使用一个CAS环境(如果需要可以进行集群),尽可能少地验证身份验证真实来源。