配置的 org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver 对象默认情况下使用 CAS 不允许我们传回属性信息并演示 Spring Security CAS 集成的此功能,所以我们建议使用允许这样做的实现。
org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler 是一个易于配置和使用的身份验证处理程序(特别是如果您已经完成了前一章的 LDAP 练习),它与我们的嵌入式 LDAP 服务器进行通信。在上一章中使用。我们将在以下指南中引导您完成返回用户 LDAP 属性的 CAS 配置。
所有的 CAS 配置都将在 CAS 安装的 WEB-INF/deployerConfigContext.xml 文件中进行,并且通常涉及将类声明插入到已经存在的配置文件段中。我们已经从 cas-server-webapp 中提取了默认的 WEB-INF/deployerConfigContext.xml 文件并将其放在 cas-server/src/main/webapp /WEB-INF。
如果您对这个文件的内容很熟悉,那是因为 CAS 使用 Spring Framework 进行配置,就像 JBCP 日历一样!如果您想深入了解这些配置设置的作用,我们建议您使用方便参考 CAS 源代码的良好 IDE。请记住,在本节以及我们引用 WEB-INF/deployerConfigContext.xml 的所有部分中,我们指的是 CAS 安装而不是 JBCP 日历。
让我们看一下以下步骤:
- First, we'll add a new BindLdapAuthenticationHandler object in place of the SimpleTestUsernamePasswordAuthenticationHandler object, which will attempt to bind the user to LDAP (just as we did in Chapter 6, LDAP Directory Services).
- The AuthenticationHandler interface will be placed in the authenticationHandlers property of the authenticationManager bean:
Don't forget to remove the reference to the SimpleTestUsernamePasswordAuthenticationHandler object, or at least move its definition to after that of the BindLdapAuthenticationHandler object, otherwise, your CAS authentication will not use LDAP and use the stub handler instead!
- You'll notice the bean reference to a contextSource bean; this defines the org.springframework.ldap.core.ContextSource implementation, which CAS will use to interact with LDAP (yes, CAS uses Spring LDAP as well). We'll define this at the end of the file using the Spring Security namespace to simplify its definition, as follows:
这将创建一个嵌入式 LDAP 实例,该实例使用本章包含的 calendar.ldif 文件。当然,在生产环境中,您可能希望指向一个真正的 LDAP 服务器。
- Finally, we'll need to configure a new org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver object. This is responsible for translating the credentials that the user has provided (that CAS has already authenticated using the BindLdapAuthenticationHandler object) into a full org.jasig.cas.authentication.principal.Principal authenticated principal. You'll notice many configuration options in this class, which we'll skim over. You are welcome to dive into them as you explore CAS further.
- Remove UsernamePasswordCredentialsToPrincipalResolver and add the following bean definition inline to the credentialsToPrincipalResolvers property of the CAS authenticationManager bean:
您会注意到,与 Spring Security LDAP 配置一样,CAS 中存在许多相同的行为,根据 DN,在目录子树下的属性匹配项上搜索主体。
请注意,我们还没有自己配置 ID 为 attributeRepository 的 bean,它应该引用 org.jasig.services.persondir.IPersonAttributeDao 的实现。 CAS 附带了一个默认配置,其中包括此接口的简单实现 org.jasig.services.persondir.support.StubPersonAttributeDao,在我们在后面的练习中配置基于 LDAP 的属性之前,这已经足够了。
您的代码应如下所示
chapter10.05-日历 和
第 10.05 章-cas-server。
所以,现在我们已经在 CAS 中配置了基本的 LDAP 身份验证。此时,您应该能够重新启动 CAS,启动 JBCP 日历(如果它尚未运行),并使用 [email protected]/admin 或 对其进行身份验证kbd>[email protected]/user1。继续尝试看看它是否有效。如果它不起作用,请尝试检查日志并将您的配置与示例配置进行比较。
如第 5 章中所述,使用 Spring Data 进行身份验证 em>,您可能会遇到启动应用程序的问题,无论名为 apacheds-spring-security 的临时目录是否仍然存在。如果应用程序似乎不存在,请检查日志并查看是否需要删除 apacheds-spring-security 目录。