Аутентификация пользователя для безопасного весеннего сервиса с помощью билета CAS RESTful API

Я успешно настроил сервер CAS. Я хочу аутентифицировать пользователя для безопасного обслуживания (в весеннем приложении), поэтому использовал RESTful API для получения билетов для пользователя. Я могу получить билеты с помощью двухэтапного вызова cas / v1 / Tickets и cas / v1 / Tickets / {TGT} для безопасного обслуживания, но когда я попытался вызвать эту службу, используя сгенерированный билет, например

localhost: 8080 / secure1? ticket? ST-ttyyy ... "он возвращает содержимое ответа страницы входа cas.

Я думаю, что мне не хватает какой-то точки в моей конфигурации.

"services.xml" моего весеннего приложения или в конфигурации cas.

Приложение Spring settings.xml

<bean id="pgtStorage"     class="org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl"/>

    <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
        <property name="service" value="http://localhost:8080/EFormRestServer/business/user/10000007" />
        <property name="sendRenew" value="false" />
        <property name="artifactParameter" value="ticket"/>
    </bean>
 <security:http create-session="stateless" use-expressions="true" entry-point-ref="casEntryPoint">        
            <security:anonymous enabled="true" />
            <security:custom-filter position="CAS_FILTER" ref="casFilter" />
        </security:http> 

        <bean id="casFilter"
        class="org.springframework.security.cas.web.CasAuthenticationFilter">
        <property name="authenticationManager" ref="authenticationManager" />
        <property name="proxyGrantingTicketStorage" ref="pgtStorage"/>
    <property name="proxyReceptorUrl" value="/business/test"/>
    <property name="serviceProperties" ref="serviceProperties"/>
    <property name="authenticationDetailsSource">
      <bean class=
        "org.springframework.security.cas.web.authentication.ServiceAuthenticationDetailsSource"/>
    </property>
    </bean>
<bean id="casEntryPoint"
        class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
        <property name="loginUrl"
            value="http://localhost:8080/cas/login" />
            <property name="serviceProperties" ref="serviceProperties" />
    </bean>
 <!-- To delegate authorization to method calls rather than to urls -->
 <!-- (Thus, we don't need to set any url-interceptor in this conf) -->
 <security:global-method-security pre-post-annotations="enabled" />
    <bean id="restAuthenticationEntryPoint" class="com.eform.rest.service.RESTAuthenticationEntryPoint" />
    <bean id="myFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
        <property name="authenticationManager" ref="authenticationManager" />
    </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.Cas20ProxyTicketValidator">
        <constructor-arg value="https://localhost:8443/cas"/>
        <property name="proxyCallbackUrl"
            value="localhost:8080/EFormRestServer/business"/>
        <property name="proxyGrantingTicketStorage" ref="pgtStorage"/>
      </bean>
    </property>
    <property name="statelessTicketCache">
      <bean class="org.springframework.security.cas.authentication.EhCacheBasedTicketCache">
        <property name="cache">
          <bean class="net.sf.ehcache.Cache"
              init-method="initialise" destroy-method="dispose">
            <constructor-arg value="casTickets"/>
            <constructor-arg value="50"/>
            <constructor-arg value="true"/>
            <constructor-arg value="false"/>
            <constructor-arg value="3600"/>
            <constructor-arg value="900"/>
          </bean>
        </property>
      </bean>
    </property>
        <property name="key" value="an_id_for_this_auth_provider_only" />
    </bean>
    <bean name="http403ForbiddenEntryPoint"
        class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
    <security:authentication-manager alias="authenticationManager">
        <security:authentication-provider
            ref="casAuthenticationProvider" />
    </security:authentication-manager>
    <security:jdbc-user-service id="userService"
        data-source-ref="dataSource"
        users-by-username-query="select user_name, password, true from user where user_name = ?"
        authorities-by-username-query="select u.user_name, r.role from user u,user_role r where u.role_id=r.role and user_name = ?" />

Пожалуйста, помогите мне решить эту проблему.

Спасибо


cas
person user2045609    schedule 10.08.2013    source источник


Ответы (1)


После сравнения с моим исследованием demo, я думаю, вам не хватает следующей конфигурации:

<bean id="serviceProperties"
      class="org.springframework.security.cas.ServiceProperties">
  ...
  <property name="authenticateAllArtifacts"       value="true"/>
</bean>

См. Справочную документацию по безопасности Spring 22.3.4 Аутентификация прокси-билета.

person btpka3    schedule 05.09.2013
comment
Я пытаюсь использовать ваш пример для RESTful CAS, но постоянно получаю код ответа 401 на localhost: 8443 / first-spring-cas / testProxy.do url - [http-nio-8443-exec-8] [first-spring-stateless] DEBUG osscweb.CasAuthenticationFilter - Ошибка запроса аутентификации: org.springframework.security .authentication.BadCredentialsException: предоставленный URL-адрес обратного вызова прокси-сервера 'localhost: 8443 / first-spring-stateless / 'не может быть аутентифицирован. Что может быть причиной этого? - person alexanoid; 13.12.2015
comment
Я создал отдельный вопрос для этой проблемы stackoverflow.com/questions/34256197/ Не могли бы вы взглянуть на это? - person alexanoid; 13.12.2015