2015-02-10 2 views
5

Я реализую Single-Sign-On + Single-Log-Out в среде Java EE через CAS.CAS Single logout not working

На стороне аутентификации у меня есть cas-server-webapp v4.0.1. Затем два простых Java + Spring MVC веб-приложения с cas-client-corev3.1.10.

вопросов нет для одного входа. Если я получаю доступ/app1, я перенаправляется на страницу входа в cas в cas-server-webapp. После ввода пользователя + pass я перенаправляюсь в/app1 правильно аутентифицированным. Кроме того, если я перейду к/app2, этот получит свой билет на авторизацию. Все идет нормально.

Что касается единого выхода из системы, может быть, я неправильно понял doc: но это то, что я делаю:

app1 и app2 имеют каждый контроллер Spring отображенный для/выхода из системы URL:

@Controller 
public class LogoutController { 

    @RequestMapping("/logout") 
    public String logout(HttpSession session){ 
     session.invalidate(); 
     return "redirect:https://cas-server-host:8443/cas/logout?service=http://cas-server-host:9080/cas1/action/index"; 
    } 
} 

Иными словами, я аннулирую http-сеанс и перенаправляю URL-адрес выхода сервера на сервер, так что билеты становятся недействительными.

В журнале саз сервера я вижу, что он уничтожает билет TGT и отправляет запрос выхода из системы в CAS фильтр каждого приложения:

DEBUG [org.jasig.cas.CentralAuthenticationServiceImpl] - <Removing ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org] from registry.> 
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Attempting to retrieve ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org]> 
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org] found in registry.> 
DEBUG [org.jasig.cas.CentralAuthenticationServiceImpl] - <Ticket found. Processing logout requests and then deleting the ticket...> 
DEBUG [org.jasig.cas.logout.SamlCompliantLogoutMessageCreator] - <Generated logout message: [<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="LR-13-TfRj1HnvAjpBjNIdaDvDMJUMXk7wffdXgB5" Version="2.0" IssueInstant="2015-02-10T12:18:18Z"><saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@[email protected]</saml:NameID><samlp:SessionIndex>ST-16-aXpUJpwO4MQ09caXZRKX-cas01.example.org</samlp:SessionIndex></samlp:LogoutRequest>]> 
DEBUG [org.jasig.cas.logout.LogoutManagerImpl] - <Sending logout request for: [http://localhost:9080/cas2]> 
DEBUG [org.jasig.cas.util.SimpleHttpClient] - <Attempting to access http://localhost:9080/cas2> 
DEBUG [org.jasig.cas.logout.SamlCompliantLogoutMessageCreator] - <Generated logout message: [<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="LR-14-BaKvuaIbwxg9Le9H3QIvWORfNSE0dxaxsCE" Version="2.0" IssueInstant="2015-02-10T12:18:20Z"><saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@[email protected]</saml:NameID><samlp:SessionIndex>ST-15-zaX6aojKs0PiggCles6J-cas01.example.org</samlp:SessionIndex></samlp:LogoutRequest>]> 
DEBUG [org.jasig.cas.util.SimpleHttpClient] - <Finished sending message to http://localhost:9080/cas2> 
DEBUG [org.jasig.cas.logout.LogoutManagerImpl] - <Sending logout request for: [http://localhost:9080/cas1]> 
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Removing ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org] from registry> 
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Attempting to retrieve ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org]> 
DEBUG [org.jasig.cas.util.SimpleHttpClient] - <Attempting to access http://localhost:9080/cas1> 
INFO [com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN 
============================================================= 
WHO: audit:unknown 
WHAT: TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org 
ACTION: TICKET_GRANTING_TICKET_DESTROYED 
APPLICATION: CAS 
WHEN: Tue Feb 10 12:18:20 CET 2015 
CLIENT IP ADDRESS: 192.168.13.164 
SERVER IP ADDRESS: 192.168.13.164 
============================================================= 

Теперь предположим, что я зарегистрировал из/CAS1, я отправлен обратно на страницу входа в cas-server. Без повторного входа в систему, если я получаю доступ/app2, , мне разрешено перемещаться по этому приложению, как если бы я все еще был аутентифицирован, и я могу получить доступ к его java.user.Principal и session. Как это может быть возможным? Не следует ли удалить запрос на выход из приложения/app2 в группу Principal и http?

+0

Можете ли вы поделиться своим развертываниемConfigContext.xml? – Ani

ответ

5

... моя ошибка, как и ожидалось, я чего-то не видел. Я должен был включить Single Sign Out Filter и Listener в обоих приложениях:

<filter> 
     <filter-name>CAS Single Sign Out Filter</filter-name> 
     <filter-class>org.jasig.cas.client.session.SingleSignOutFilter 
     </filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>CAS Single Sign Out Filter</filter-name> 
     <url-pattern>/*</url-pattern></filter-mapping> 
    <listener>  
     <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> 
    </listener> 

    <filter> 
     <filter-name>CAS Authentication Filter</filter-name> 
     <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> 
     <init-param> 
      <param-name>casServerLoginUrl</param-name> 
      <param-value>https://cas-server-host:8443/cas/login</param-value> 
     </init-param> 
     <init-param> 
      <param-name>service</param-name> 
      <param-value>http://localhost:9080/cas1</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>CAS Authentication Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <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-server-host:8443/cas/</param-value> 
     </init-param> 
     <init-param> 
      <param-name>service</param-name> 
      <param-value>http://localhost:9080/cas1</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>CAS Validation Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <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 HttpServletRequest Wrapper Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
+0

эй, я пробовал то же самое .. но все равно его не выходить .. любые изменения нужно сделать cas webapp? – tarkikshah

+0

Что это за те теги и что это за ссылки? служба HTTP: // локальный: 9080/CAS1 tarkikshah

+0

Этот параметр относится к саз клиентским приложением. Посмотрите на https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml – codependent