2012-01-12 3 views
2

WebappとWebappの2つのWebアプリケーションがあります。Webapp AはSpring 3.1 webappです。 Webapp Bは別の非スプリングwebappです。どちらもCASによって保護されています。私の目標は、WebアプリケーションAがプロキシチケットを使用してWebアプリケーションBから情報を取得できるようにすることです。プロキシチケットを使用したSpringとCAS

私はspring-securityによって提供されるcas-sampleをwebapp Aとみなしました。私のローカルカスは期待どおりに動作します。 casサンプルに精通していない人には、cas-sampleアプリケーション内の別のページを要求するためにプロキシチケットを使用する例が提供されています。私はWebアプリケーションBのためにmod_auth_casを使って保護されたApache Webサーバーの下で単純なページを使用します。再び、webapp Bは期待通りに動作します。プロキシチケットを使用してwebappBを要求するようにcas-sampleを変更すると、動作しません。 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内にあり、外部アプリケーションではない場合、なぜこれが機能しますか?

ありがとうございました。

EDIT:ここでは、プロキシチケットを使用するWebアプリケーションのページにリクエストが行われたときに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 

答えて

6

私はついにこれを考え出しました。私は問題がwebapp Bにあったのは間違っていた。明らかにプロキシ認証はmod_auth_casでサポートされていない。私は代替Webapp B(Tomcatを使った簡単なJava Webアプリケーションでした)を使って、望みの結果を得ることができました。この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> 
関連する問題