Реализация единого входа с использованием CAS + Spring Security - PullRequest
6 голосов
/ 19 июля 2010

Я пытаюсь внедрить SSO в нескольких веб-приложениях, используя CAS и Spring Security.Ожидаемый случай:
CAS - http: // localhost: 8080 / cas /
Контент защищенного приложения - http: //localhost:8081/cas-client1/secure/index.html
Контент защищенного приложения B- http: //localhost:8081/cas-client2/secure/index.html

1) Когда пользователь получает доступ к cas-client1, будет предложена форма входа в CAS и будет инициирована аутентификация.
2) Тот же пользовательский доступ cas-client2, предыдущий вход в систему должен быть распознан, и никакая форма входа не будет запрошена

Однако мне не удалось реализовать шаг 2. Форма входа в CAS все еще запрашивается пользователем и поэтому требуетдвойной логин.Есть ли неправильные настройки в моей конфигурации Spring Security:

  <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>

1 Ответ

9 голосов
/ 21 июля 2010

Проблема окончательно решена. Мой CAS использует HTTP и, следовательно, должен установить для безопасных файлов cookie значение false.

Изменить ticketGrantingTicketCookieGenerator.xml

p:cookieSecure="false"
...