我们需要设置一个CAS服务器来对我们的应用程序进行SSO(所有这些都在JAVA中)。 这是我的情况:
CAS1:现有CAS服务器,基于ORACLE LDAP(我们无法控制CAS1和LDAP)。我们打算忽略这个。 与CAS集成的几个应用程序。
CAS2:我们计划基于MS Active Directory设置新的CAS服务器,因为我们有很多新用户。我们计划在AD中维持它们。 我们计划使用CAS2设置SSO的应用程序仍然相同。
我们需要的是来自现有LDAP和新AD的用户都可以通过SSO登录到应用程序。
是否有一种简单的方法,比如设置我的新CAS以同时使用LDAP和AD。因此双方用户都可以登录我们的应用程序。如果可能的话,这是我认为更好的方式。有详细的例子吗?
我可以在两个CAS之间设置联合吗? Jasig CAS有可能吗?
请帮忙!非常感谢!
答案 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环境(如果需要可以进行集群),尽可能少地验证身份验证真实来源。