使用Spring Security 3实现CAS

3

我目前已经配置并且成功运行了Spring Security。我想让CAS工作,以便我可以拥有跨多个应用程序的单点登录。但是我不知道如何使CAS使用我的自定义userdetailService。

目前,在我的spring-security.xml文件中,我有以下内容:

    <authentication-manager alias="authManager">
        <authentication-provider user-service-ref="userDetailsService">
            <password-encoder ref="passwordEncoder">
                <salt-source ref="saltSource"/>
            </password-encoder>
        </authentication-provider>
    </authetication-manager>

我找到的所有cas示例都建议按照以下方式实现管理:

<beans:bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    <beans:property name="authenticationUserDetailsService">
        <beans:bean class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
            <beans:constructor-arg ref="userDetailsService"/>
        </beans:bean>
    </beans:property>
    <beans:property name="serviceProperties" ref="serviceProperties"/>
    <beans:property name="ticketValidator">
        <beans:bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
            <beans:constructor-arg index="0" value="https://localhost:8443/cas"/>
        </beans:bean>
    </beans:property>
    <beans:property name="key" value="1234554321"/>
</beans:bean>

<authentication-manager alias="authManager">
    <authentication-provider ref="casAuthenticationProvider"/>
</authentication-manager>

文档有些混乱。我该如何从一个工作的spring-security应用程序转换到实现cas并仍然使用我的自定义用户详细信息?还需要更改jsp页面上的哪些内容?非常感谢您的帮助。

谢谢


“implements cas and still use my custom user details”是什么意思?如果您使用CAS服务器,则希望该服务器进行身份验证。您的应用程序将不再执行此操作。(也许您想允许匿名访问)。 - Andy
在我的Spring Security应用程序中,我有一个passwordencoder和saltsource bean来加密我的密码。我还有一个自定义的UserDetails bean,实现了UserDetailsService。我想我不知道如何将它们移植到CAS上,以便一切仍然像原来一样工作。我还创建了自己的角色、权限等。 - blong824
2个回答

4
我认为您想让CAS使用自己的密码+盐值编码器进行身份验证。
不幸的是,这不是一个简单的配置,并且配置不在您的Spring应用程序中。 您需要重新编译CAS以包含您的自定义密码+盐值编码器。 因此,当Spring调用CAS进行身份验证时,将使用相同的自定义密码+盐值编码器。
幸运的是,CAS团队创建了WAR覆盖方法,以便用户可以轻松地重新编译CAS服务器以包括自定义密码+盐值编码器。
文档在这里 https://wiki.jasig.org/display/CASUM/Best+Practice+-+Setting+Up+CAS+Locally+using+the+Maven2+WAR+Overlay+Method 您需要非常耐心地按照步骤操作,并确保您的系统安装了Maven2。 您无需下载任何库,因为Maven会处理这些事情。 WAR覆盖方法的基本思想是创建一个受Maven控制的文件夹,在该文件夹中创建子文件夹以添加自定义Java库。
Maven将用于重新编译自定义Java代码和CAS文件,生成WAR文件,您可以将其发布到SSL服务器。只需确保CAS和Spring应用程序都使用SSL即可。祝你好运!

2
以下是我在设置CAS基础设施时建议的步骤:
  1. 首先,您应该了解什么是CAS以及它是如何工作的。请查看这篇文章和jasig网页。
  2. 然后下载Spring Source示例,运行cas-sample,并进行操作以更好地了解它。(我不确定是否有自述文件或您可以在spring source网页上获取如何使用它的信息,但肯定有相关信息)
  3. 使您的应用程序对此简单的CAS服务器进行身份验证(在CAS网页上找到配置示例)。
  4. 设置和配置您自己的CAS服务器,该服务器使用您当前的身份验证系统对用户进行授权。
    • 您可以使用SAML协议将角色等从CAS传输到客户端应用程序进行身份验证后
    • 要在客户端应用程序中应用角色,您可能需要自己实现。
  5. 调整其他应用程序以使用CAS服务器

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接