2017-01-05 2 views
0

Ich habe Probleme, die XML-Antwort nach dem proxyValidate/Ticket Aufruf an den CAS-Server abruft. Alles wird überprüft in Ordnung und die Rückruf-URL mit dem richtigen PGT und PGTIOU ABER wird, da die Anwendung aufgerufen wird unter verschiedenen Servern verteilt, ich brauche die PGTIOU an das Back-End, um für eine anderen Server zuordnen zu können, um es zu erhalten.CAS proxyCallbackURL XML-Antwort

Dies wäre natürlich trivial, wenn ich einen Einfluß auf die XML-Antwort von einem erfolgreichen proxyValidate (oder seviceValidate), die den Benutzer und PGTIOU enthält pro 2.0+ für CAS angegeben bekommen

im Protokoll als

Meine Konfiguration ist folgende:

<!-- begin CAS servlet filter --> 
 
    <filter> 
 
     <filter-name>CAS Authentication Filter</filter-name> 
 
     <filter-class>org.sakaiproject.login.filter.SakaiCasAuthenticationFilter</filter-class> 
 

 
     <init-param> 
 
      <param-name>casServerLoginUrl</param-name> 
 
      <param-value>https://cas.someplace.edu/login</param-value> 
 
     </init-param> 
 

 
     <init-param> 
 
      <param-name>serverName</param-name> 
 
      <param-value>https://${serverName}</param-value> 
 
     </init-param> 
 
    </filter> 
 

 
    <filter> 
 
     <filter-name>CAS Validation Filter</filter-name> 
 
     <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> 
 

 
     <init-param> 
 
      <param-name>casServerUrlPrefix</param-name> 
 
      <param-value>https://cas.someplace.edu</param-value> 
 
     </init-param> 
 

 
\t \t <init-param> 
 
\t  <param-name>proxyCallbackUrl</param-name> 
 
\t  <param-value>https://test-sakai.someplace.edu/sakai-login-tool/pgtHandler</param-value> 
 
\t  </init-param> 
 

 
     <init-param> 
 
      <param-name>serverName</param-name> 
 
      <param-value>https://${serverName}</param-value> 
 
     </init-param> 
 
     
 
    </filter> 
 

 
    <filter> 
 
     <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 
 
     <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> 
 
    </filter> 
 

 
    <filter-mapping> 
 
     <filter-name>CAS Authentication Filter</filter-name> 
 
     <url-pattern>/container</url-pattern> 
 
    </filter-mapping> 
 

 
    <filter-mapping> 
 
     <filter-name>CAS Validation Filter</filter-name> 
 
     <url-pattern>/*</url-pattern> 
 
    </filter-mapping> 
 

 
    <filter-mapping> 
 
     <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 
 
     <url-pattern>/*</url-pattern> 
 
    </filter-mapping>

Wo werde ich die erfolgreiche XML-Antwort erhalten können? Die Validierung wird von Cas20ProxyReceivingTicketValidationFilter durchgeführt, kann aber anscheinend nicht darauf zugreifen.

Danke.

Antwort

1

Die Cas20ProxyReceivingTicketValidationFilter hat einen internen Cache für die (PGTIOU, PGT), die standardmäßig im Speicher ist: https://github.com/apereo/java-cas-client/blob/master/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java#L78 Für eine verteilte Anwendung sollten Sie Ihren eigenen verteilten Cache bereitstellen.

Die Mechanismen ist die folgende:

Client authentifiziert -> CAS sendet PGTIOU/PGT zurück über angegeben CallbackURL -> CAS beantwortet die ursprüngliche Anforderung zurück und Proxy/Service Validierfilter verarbeiten und versucht das abrufen möglicherweise gespeichertes PGT mit dem PGTIOU innerhalb des XML-Körpers.

Für all dies funktioniert, die proxyCallbackUrl und proxyGrantingTicketStorageClass muss in der xml/Feder-Konfiguration definiert werden. url arbeitet in Verbindung mit dem Speicher Implementierung

+0

Meiner Meinung nach ist der Mechanismus, wie der Rückruf ist vage, um es gelinde auszudrücken. Beim Durchsehen des Codes konnte ich jedoch meine Implementierung vervollständigen, indem ich die erfolgreiche Authentifizierung und das Callback-PGT mit dem PGTIOU als Kleber am Backend verband. Meine Umgebung ist sehr komplex, um ecache für solch eine triviale Aufgabe zu verwenden. – Fer