【发布时间】: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