【问题标题】:Can one Jasig CAS server be config with two LDAP一个 Jasig CAS 服务器可以配置两个 LDAP
【发布时间】:2014-06-01 03:23:33
【问题描述】:

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

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

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

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

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

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

请帮忙!非常感谢!

【问题讨论】:

    标签: ldap single-sign-on cas jasig


    【解决方案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>
    

    只需为您要对其进行身份验证的其他事物添加更多身份验证处理程序。查看 https://wiki.jasig.org/display/CASUM/LDAP 获取 CAS LDAP 处理程序,查看 https://wiki.jasig.org/display/CASUM/Active+Directory 获取 CAS Active Directory 处理程序。

    它的工作方式是,CAS 将尝试按顺序对每个处理程序进行身份验证。第一个成功的结果是成功的 CAS 登录。因此,如果您在 LDAP 中有一条 uid=jsmith 的记录,而在 AD 中有一条 cn=jsmith 的记录,并且它们都具有相同的密码,那么在 CAS 中首先定义的那个总是获胜!因此,您应该确保您的系统之间没有登录 ID 冲突,否则您可能会面临一些不良副作用(尤其是如果 LDAP 中的 jsmith 与 AD 中的 jsmith 不是同一个人)。

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

    那么有没有更好的方法呢?好吧,如果可能的话,请归结为一种身份验证事实来源。

    关于 CAS 联盟:否。您也许可以设置服务器,使它们相互信任彼此的票证,但我建议使用一个 CAS 环境(如果您愿意,可以集群)对尽可能少的身份验证源进行身份验证。

    【讨论】:

    • 如何在两个 LDAP 系统上使用相同的 UID,但使用不同的密码。如果它在第一个 ldap 验证失败,我希望它通过第二个 ldap 验证失败。这是可配置的行为吗?如果没有,我很确定我知道在 cas 代码中的哪里处理这个问题。
    • 我很确定只要设置两个 LDAP 服务器就可以解决这个问题。但这很危险,除非你有充分的理由。
    • 它似乎不像开箱即用那样工作,至少对于 CAS 3.5.2。当它尝试在第一个 ldap 上绑定时会引发异常(无效凭据),并且在遍历 authenticationHandlers 列表时会跳出循环。
    • 尝试在 cas-users 列表中询问:wiki.jasig.org/plugins/servlet/mobile#content/view/7537753
    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2020-02-14
    • 2012-05-10
    • 2016-11-10
    相关资源
    最近更新 更多