【问题标题】:Spring and CAS using Proxy TicketsSpring 和 CAS 使用代理票证
【发布时间】:2012-02-08 22:43:07
【问题描述】:

我有两个 web 应用程序,Webapp A 和 webapp B。Webapp A 是 Spring 3.1 webapp。 Webapp B 是独立的非弹簧 webapp。两者都受 CAS 保护。我的目标是允许 webapp A 使用代理票证从 webapp B 检索信息。

为了简化事情,我将 spring-security 提供的 cas-sample 用作 webapp A。配置为使用我的本地 cas 的默认示例按预期工作。对于不熟悉 cas-sample 的人,它提供了一个示例,该示例使用代理票证在 cas-sample 应用程序中请求另一个页面。然后,我在使用 mod_auth_cas 保护 webapp B 的 apache 网络服务器下使用一个简单页面。同样,webapp B 可以正常工作。当我将 cas-sample 更改为使用代理票证请求 webappB 时,它不起作用。来自 webappB 请求的响应是 CAS 登录页面。注意:我已经为 webapp B 尝试了一个 tomcat webapp(非弹簧),结果相同。这让我相信问题不在于 webapp B。下面是用于使用代理票证向 webapp B 发出请求的代码。并且安全上下文配置可以查看here

final String targetUrl = "https://server/webappB";
final CasAuthenticationToken token = (CasAuthenticationToken) request.getUserPrincipal();
final String proxyTicket = token.getAssertion().getPrincipal().getProxyTicketFor(targetUrl);
final String serviceUrl = targetUrl+"?ticket="+URLEncoder.encode(proxyTicket, "UTF-8");
String proxyResponse = CommonUtils.getResponseFromServer(serviceUrl, "UTF-8");

我做错了什么?为什么当上面的 targetUrl 在 webapp A 中而不是外部应用程序时这会起作用?

感谢您的帮助。

编辑:如果对使用代理票证的 webapp 页面发出请求时,CAS 日志中显示的内容会有所帮助。

[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - Attempting to retrieve ticket [TGT-2-YX0RNVRDHAPyGLy6ymGGVucUSQyjtre4jvGrAxYk2hXsehsxqx-cas]
[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - Ticket [TGT-2-YX0RNVRDHAPyGLy6ymGGVucUSQyjtre4jvGrAxYk2hXsehsxqx-cas] found in registry.
[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - Added ticket [ST-3-JrQKqqpZJz00a2hsGZP6-cas] to registry.
[org.jasig.cas.CentralAuthenticationServiceImpl] - Granted proxy ticket [ST-3-JrQKqqpZJz00a2hsGZP6-cas] for service [https://server/webappB] for user [testUser]
[org.jasig.cas.web.support.CasArgumentExtractor] - Extractor generated service for: https://server/webappB
[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - Attempting to retrieve ticket [ST-3-JrQKqqpZJz00a2hsGZP6-cas]
[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - Ticket [ST-3-JrQKqqpZJz00a2hsGZP6-cas] found in registry.
[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - Removing ticket [ST-3-JrQKqqpZJz00a2hsGZP6-cas] from registry
[org.jasig.cas.web.support.CasArgumentExtractor] - Extractor generated service for: https://server/webappB
[org.jasig.cas.web.flow.InitialFlowSetupAction] - Placing service in FlowScope: https://server/webappB
[org.jasig.cas.web.flow.InitialFlowSetupAction] - Placing service in FlowScope: https://server/webappB
[org.jasig.cas.web.support.CasArgumentExtractor] - Extractor generated service for: https://server/webappB

【问题讨论】:

    标签: java spring spring-security single-sign-on cas


    【解决方案1】:

    我终于想通了。我错了,问题确实出在 webapp B 上。显然 mod_auth_cas 不支持代理身份验证。我能够使用我的备用 webapp B(这是一个带有 tomcat 的简单 Java webapp)获得所需的结果。此 web 应用程序使用 web.xml 中定义的 CAS 过滤器。这最初不起作用的原因是 validateUrl 参数未设置为 proxyValidate 并且 authorizedProxy 参数未设置。正确设置这些参数后,webapp B 能够接受代理票证。这是最终过滤器配置的样子:

       <filter>
         <filter-name>CAS Filter</filter-name>
         <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
         <init-param>
             <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
             <param-value>https://cas.server:9443/cas/login</param-value>
         </init-param>
         <init-param>
             <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
             <param-value>https://cas.server:9443/cas/proxyValidate</param-value>
         </init-param>
         <init-param>
             <param-name>edu.yale.its.tp.cas.client.filter.authorizedProxy</param-name>
             <param-value>https://webappA:8443/cas-sample/j_spring_cas_security_proxyreceptor</param-value>
         </init-param>
         <init-param>
             <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
             <param-value>webappB:7443</param-value>
         </init-param>
       </filter>
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2019-08-22
      • 2021-05-14
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多