In some cases, CAS set origin = null when redirect to "https://gallifrey.com.br/analytics/j_spring_cas_security_check?ticket=ST-14-RbL5dc2AZFWG9NtlXZBX-gallifrey.com.br"
Em segunda-feira, 8 de agosto de 2016 09:10:13 UTC-3, Alexandre Arcanjo de Queiroz escreveu: > > I am using CAS Server version 4.0.7 in a multidomain environment. > > First the user logs in a portal, a PHP page (using PHP-CAS) in > tardis.com.br domain. The CAS Server is in tardis.com.br domain too. > > If the user logs in successfully, the portal enables a button that > redirects to the principal CAS Service deployed in another domain and > context: https://gallifrey.com.br/principal. > > The problem is that principal CAS Service invoke ajax requests to another > protected CAS Service, Analytics Service and CAS returns the login page > instead identify that user is logged. > > The Principal Service and Analytics Service are using Spring Framework > 3.2.3.RELEASE, Spring Security 3.2.9.RELEASE and CAS Client 3.4.1. The > applications are using > org.jasig.cas.client.validation.Cas20ProxyTicketValidator because we need > to execute server side requests between services and client side requests > via ajax too. > > CAS Proxy Authentication in the Server Side using Spring Security CAS and > CAS Client works as expected. > > final CasAuthenticationToken casAuthenticationToken = > (CasAuthenticationToken) > SecurityContextHolder.getContext().getAuthentication(); > final String proxyTicket = > casAuthenticationToken.getAssertion().getPrincipal().getProxyTicketFor(targetUrl); > // The proxyTicket is generated!!! > But if i'm in https://gallifrey.com.br/principal and a simple JavaScript > code in a html file like this returns 302 (the login page): > > $.ajax({ > "url": "/analytics/foo/bar/xpto/", > "contentType": "application/x-www-form-urlencoded", > "data": { > "name" : "Foo" > }, > "timeout": 3000, > "type": "POST", > "success": function(data, textStatus, jqXHR) { > // Returns the login page > }, > "error": function(jqXHR, textStatus, errorThrown) { > // Do something > } > }); > The Principal Service and Analytics Service are behind a Nginx, using > reverse proxy. The Principal Service is in a WebLogic and Analytics Service > in a Tomcat. And Nginx is using a SSL certificate. > > Here is an example of CAS + Spring Security configuration for the Java > applications: > > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:sec="http://www.springframework.org/schema/security" xmlns:p=" > http://www.springframework.org/schema/p" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context=" > http://www.springframework.org/schema/context" > xmlns:util="http://www.springframework.org/schema/util" > xsi:schemaLocation="http://www.springframework.org/schema/security > > http://www.springframework.org/schema/security/spring-security-3.2.xsd > http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-3.2.xsd > http://www.springframework.org/schema/util > > http://www.springframework.org/schema/util/spring-util-3.2.xsd > http://www.springframework.org/schema/context > > http://www.springframework.org/schema/context/spring-context-3.2.xsd"> > > <sec:http auto-config="true" use-expressions="true" > entry-point-ref="casEntryPoint"> > <sec:intercept-url pattern="/**" access="isAuthenticated()" /> > <sec:custom-filter ref="requestSingleLogoutFilter" > before="LOGOUT_FILTER" /> > <sec:custom-filter ref="singleLogoutFilter" before="CAS_FILTER" /> > <sec:custom-filter ref="casFilter" position="CAS_FILTER" /> > > <sec:logout logout-url="/logout" > > logout-success-url="${cas.baseUrl}/logout?service=${service.baseUrl}/" > invalidate-session="true" > delete-cookies="JSESSIONID" /> > > <sec:headers> > <sec:cache-control /> > </sec:headers> > </sec:http> > > <sec:authentication-manager alias="authManager"> > <sec:authentication-provider ref="casProxyAuthProvider" /> > </sec:authentication-manager> > > <bean id="userService" > class="org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService"> > <constructor-arg> > <array> > <value>role</value> > </array> > </constructor-arg> > </bean> > > <bean id="singleLogoutFilter" > class="org.jasig.cas.client.session.SingleSignOutFilter" /> > > <bean id="requestSingleLogoutFilter" > > class="org.springframework.security.web.authentication.logout.LogoutFilter" > p:filterProcessesUrl="/j_spring_cas_security_logout"> > <constructor-arg value="${cas.baseUrl}/logout" /> > <constructor-arg> > <bean > > class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" > > /> > </constructor-arg> > </bean> > > <bean id="serviceProperties" > class="org.springframework.security.cas.ServiceProperties" > p:service="${service.baseUrl}/j_spring_cas_security_check" > p:sendRenew="false" p:authenticateAllArtifacts="true" /> > > <bean id="casEntryPoint" > > class="org.springframework.security.cas.web.CasAuthenticationEntryPoint" > p:serviceProperties-ref="serviceProperties" > p:loginUrl="${cas.baseUrl}/login" /> > > <bean id="casFilter" > > class="org.springframework.security.cas.web.CasAuthenticationFilter" > p:authenticationManager-ref="authManager" > p:serviceProperties-ref="serviceProperties" > p:proxyGrantingTicketStorage-ref="pgtStorage" > p:proxyReceptorUrl="/j_spring_cas_security_proxyreceptor"> > <property name="authenticationDetailsSource"> > <bean > > class="org.springframework.security.cas.web.authentication.ServiceAuthenticationDetailsSource"> > <constructor-arg ref="serviceProperties" /> > </bean> > </property> > <property name="authenticationFailureHandler"> > <bean > > class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> > </bean> > </property> > </bean> > > <bean id="pgtStorage" > class="org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl" > /> > > <bean id="cacheManager" > > class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> > <property name="configLocation"> > <value>WEB-INF/classes/ehcache.xml</value> > </property> > </bean> > > <bean id="casTicketsCache" class="net.sf.ehcache.Cache" > factory-bean="cacheManager" factory-method="getCache"> > <constructor-arg value="casWebServiceTickets" /> > </bean> > > <bean id="casProxyAuthProvider" > > class="org.springframework.security.cas.authentication.CasAuthenticationProvider" > p:serviceProperties-ref="serviceProperties" > p:key="casProxyAuthProviderKey" > p:authenticationUserDetailsService-ref="userService"> > <property name="ticketValidator"> > <bean > class="org.jasig.cas.client.validation.Cas20ProxyTicketValidator" > > p:proxyCallbackUrl="${service.baseUrl}/j_spring_cas_security_proxyreceptor" > p:proxyGrantingTicketStorage-ref="pgtStorage" > p:acceptAnyProxy="true"> > <constructor-arg value="${cas.baseUrl}" /> > </bean> > </property> > <property name="statelessTicketCache"> > <bean > > class="org.springframework.security.cas.authentication.EhCacheBasedTicketCache"> > <property name="cache" ref="casTicketsCache" /> > </bean> > </property> > </bean> > > </beans> > Maven dependencies: > > <properties> > <java.version>1.7</java.version> > <spring.version>3.2.3.RELEASE</spring.version> > <spring-security.version>3.2.9.RELEASE</spring-security.version> > <cas-client.version>3.4.1</cas-client.version> > <ehcache.version>2.9.0</ehcache.version> > </properties> > <dependency> > <groupId>org.springframework.security</groupId> > <artifactId>spring-security-cas</artifactId> > <version>${spring-security.version}</version> > </dependency> > <dependency> > <groupId>org.springframework.security</groupId> > <artifactId>spring-security-core</artifactId> > <version>${spring-security.version}</version> > </dependency> > <dependency> > <groupId>org.springframework.security</groupId> > <artifactId>spring-security-config</artifactId> > <version>${spring-security.version}</version> > </dependency> > <dependency> > <groupId>org.springframework.security</groupId> > <artifactId>spring-security-web</artifactId> > <version>${spring-security.version}</version> > </dependency> > <dependency> > <groupId>org.jasig.cas.client</groupId> > <artifactId>cas-client-core</artifactId> > <version>${cas-client.version}</version> > </dependency> > <dependency> > <groupId>net.sf.ehcache</groupId> > <artifactId>ehcache</artifactId> > <version>${ehcache.version}</version> > </dependency> > CAS Server Service List: > > deployerConfigContext.xml: > > <util:list id="registeredServicesList"> > <bean class="org.jasig.cas.services.RegexRegisteredService" p:id="0" > p:name="HTTP and IMAP" p:description="Allows HTTP(S) and IMAP(S) > protocols" > p:serviceId="^(https?|imaps?)://.*" p:evaluationOrder="10000001" > p:enabled="true" p:allowedToProxy="true" p:ssoEnabled="true" /> > </util:list> > > Tomcat configuration (server.xml): > > <Connector port="8080" protocol="HTTP/1.1" > connectionTimeout="20000" > maxThreads="1000" > URIEncoding="UTF-8" > redirectPort="8443" /> > > > In a single domain environment everything works as expected but in a > multidomain environment CAS Server redirect to login page in first XHR > request instead detect that user is logged. Any ideas why this occurs? > > -- You received this message because you are subscribed to the Google Groups "CAS Community" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/. To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/14380a87-0a0b-4a1e-bf2d-0e78b158273f%40apereo.org. For more options, visit https://groups.google.com/a/apereo.org/d/optout.
