我有两个Web应用程序,Webapp A和webapp B. Webapp A是Spring 3.1 webapp.Webapp B是独立的非spring webapp.两者都受CAS保护.我的目标是允许webapp A使用代理票据从webapp B中检索信息.
为了简化操作,我将spring-security提供的cas-sample作为webapp A.配置为使用本地cas的默认样本按预期工作.对于那些不熟悉cas-sample的人,它提供了一个使用代理票据来请求cas-sample应用程序中的另一个页面的示例.然后我使用一个简单的页面在apache webserver下使用mod_auth_cas保护webapp B.同样,webapp B按预期工作.当我更改cas-sample以使用代理票据请求webappB时,它不起作用.来自webappB请求的响应是CAS登录页面.注意:我已经为webapp B尝试了一个tomcat webapp(非spring),结果相同.这让我相信问题不在webapp B中.下面是用于使用代理票证向webapp B发出请求的代码.并且可以在此处查看安全上下文配置.
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");
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?当上面的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 …Run Code Online (Sandbox Code Playgroud)