2010-07-19 23 views
6

CAS ve Yay Güvenliği kullanarak çeşitli web uygulamalarında SSO uygulamasına çalışıyorum. Beklenen durum:
CAS - http: // localhost:
App A içerik korumalı/8080/cas - http: App B korumalı //localhost:8081/cas-client1/secure/index.html
içerik - http: //localhost:8081/cas-client2/secure/index.html
CAS + Yay Güvenliği kullanarak SSO uygulayın

1) Kullanıcı erişimi cas-client1 olduğunda, CAS oturum açma formu istenir ve kimlik doğrulaması tetiklenir.
2) Aynı kullanıcı erişim cas-istemci2, önceki giriş kabul edilmelidir ve hiçbir giriş formu
istenecektir

Ancak, ben yine de kullanıcıya istendiğinde adım 2. CAS giriş formunu uygulamakta başarısız oldu am ve bu nedenle çift gerektirir oturum aç. Spring Security yapılandırmasında yanlış ayar var mı:

<security:http entry-point-ref="casAuthenticationEntryPoint" auto-config="true"> 
    <security:intercept-url pattern="/secure/**" access="ROLE_USER" /> 
    <security:custom-filter position="CAS_FILTER" ref="casAuthenticationFilter" /> 
    </security:http> 

    <bean id="casAuthenticationEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint"> 
    <property name="loginUrl" value="http://localhost:8080/cas/login" /> 
    <property name="serviceProperties" ref="serviceProperties" /> 
    </bean> 

    <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties"> 
    <!-- http://localhost:8081/cas-client2 for app 2--> 
    <property name="service" value="http://localhost:8081/cas-client1/j_spring_cas_security_check" /> 
    </bean> 

    <security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider ref="casAuthenticationProvider" /> 
    </security:authentication-manager> 

    <bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter"> 
    <property name="authenticationManager" ref="authenticationManager" /> 
    <property name="authenticationFailureHandler"> 
     <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> 
     <property name="defaultFailureUrl" value="/casfailed.jsp" /> 
     </bean> 
    </property> 
    </bean> 

    <bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider"> 
    <property name="userDetailsService" ref="userService" /> 
    <property name="serviceProperties" ref="serviceProperties" /> 
    <property name="ticketValidator"> 
     <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"> 
     <constructor-arg index="0" value="http://localhost:8080/cas" /> 
     </bean> 
    </property> 
    <property name="key" value="an_id_for_this_auth_provider_only" /> 
    </bean> 

    <security:user-service id="userService"> 
    <security:user name="wilson" password="wilson" authorities="ROLE_USER" /> 
    </security:user-service> 

cevap

9

Sorun nihayet çözüldü. CAS'ım HTTP kullanıyor ve bu nedenle güvenli çerezleri yanlış olarak ayarlamanız gerekiyor.

Değiştir ticketGrantingTicketCookieGenerator.xml

p:cookieSecure="false" 
+4

iyi test için bilmek, ama teşekkür ederim herkes https- – chrismarx

+0

bu çalışıyor olması gerektiğini düşünüyorum! Bir yıl önce bu cevaba ilk kez rastladım ve bir kez daha CAS'a dalmaya başladım. QA ortamlarında sorun yaratabilecek başka bir parametre de p: cookieDomain'dir. Alan, üretim ile KG arasında farklılık gösteriyorsa, bu ayarın tamamen ayarlanması veya kaldırılması gerekir. P: cookieDomain öğesinin kaldırılması ve ayarlanması p: cookieSecure = "false", CAS'ı QA'da çalıştırmak ve çalıştırmak için en hassas ayardır. – AndreiM

+0

nihayet anladım +1 .. – edaklij

İlgili konular